publicStatementstm;publicResultSetrs;publicvoidexecuteSelect(StringvSQL){try{stm=conexao.createStatement();rs=stm.executeQuery(vSQL);}catch(SQLExceptionerro){JOptionPane.showMessageDialog(null,"Não foi possível "+"executar o comando SQL, "+erro+", o SQL passado foi "+vSQL);}}
acontece o seguinte… seu eu for utilizar esse rotina executarSelect no mesmo JFrame mas de duas vezes dar erro. Então eu tive que ficar criando várias rotinas
public Statement stm;
public ResultSet rs;
public Statement stm2;
public ResultSet rs2;
public Statement stm3;
public ResultSet rs3;
Tem como eu limpar a variável pra ser reutilizada novamente. Eu tentei assim:
Cara, procure pelo design pattern chamado DAO. Ele eh usado para encapsular toda a complexidade de acesso e persistencia de dados de uma aplicacao, consequentemente voce tera um grande reaproveitamento de codigo.
ate
ViniGodoy
Seu método tem diversos problemas:
Ele não fecha a conexão;
Ele não fecha o Statement;
Ele não fecha o ResultSet;
Ele mostra um JOptionPane numa camada onde ele não deveria ser mostrado;
Ele não usa PreparedStatement (e deixa o código sujeito a ataque de SQL-Injection);
Sugestão: Se você não quer usar uma API de mapeamento objeto-relacional, como o Hibernate, dê uma olhada no Spring. As classes de acesso a dados dele já fazem esse mesmo tratamento que você quer reaproveitar, mas de uma maneira segura e correta, e com uma sintaxe praticamente igual a do java padrão.
A
alexpassos
Galera… eu sou iniciante em java… então não entendi muita coisa ou quase nada.
Então qual seria o melhor caminho a seguir? Se possível o mas fácil inicialmente.
ViniGodoy
Fica assim, embora esse ainda tenha a desvantagem de não usar o PreparedStatement:
publicRowSetrunQuery(Stringquery){try{
Connectionconn=null;Statementstmt=null;ResultSetrs=null;try{conn=createConnection(); //Abre uma conexão com o banco.stmt=conn.createStatement(); //Cria o statementrs=stmt.executeQuery(query); //Executa a query//CopiaparaumRowSetCachedRowSetrowset=newCachedRowSetImpl();rowset.populate(rs);//Retornaorowsetreturnrowset; }finally{
//Garanteofechamentodetodososrecursosif(conn!=null)conn.close();if(stmt!=null)stmt.close();if(rs!=null)rs.close();}
}catch(SQLExceptione){//Sederproblema,lançaumaRuntimeExceptionparaqueainterface//possamostrarissonumJOptionPane(oulogar).
thrownewRuntimeException(e);}
}
Pelo menos esse método tentará fechar todos os recursos.