Olá pessoal, estou tentando criar um método de conexão mais fácil para não ter que ficar toda hora abrindo a classe do banco em geral… mais não estou conseguindo imaginar como.
Código:
try{Class.forName("com.mysql.jdbc.Driver");Connectioncon=DriverManager.getConnection("jdbc:mysql://127.0.0.1/Test","root","");StringSQL="INSERT INTO test.Teste(Razao) VALUES(?)";PreparedStatementstmt=con.prepareStatement(SQL);stmt.setString(1,jTRazaoSocial.getText());stmt.executeUpdate();stmt.close();con.close();jTRazaoSocial.setText("");}catch(ClassNotFoundExceptionex){System.out.println(ex);}catch(SQLExceptionex){System.out.println(ex);}
Mais empaquei na parte onde fica a criação do “stmt”:
PreparedStatementstmt=con.prepareStatement(SQL);
No caso a conexão foi criada no método, mais o stmt é criado no projeto e tem que ser igualado ao con.
Eu não estou conseguindo pegar bem a lógica correta disso, alguem pode ajudar?
Procure por um padão chamado Factory. Resolve seu problema e eh bem legal aprender.
igor_ks
Seu PreparedStatement vai ter q ter em toda classe que for fazer alguma interacao com o banco de dados mesmo, disso nao vai ter como fugir (com essa arquitetura)
Deixa seu método de conexão em alguma classe separada (classe Conexao por exemplo) e nas suas classes vc chama o seu getConnection. É claro que precisa ser singleton, senao vai abrir uma conexao pra cada statement
try{Modulomd=newModulo();Connectioncon=md.getConnection();StringSQL="INSERT INTO test.Teste(Razao) VALUES(?)";PreparedStatementstmt=con.prepareStatement(SQL);stmt.setString(1,jTRazaoSocial.getText());stmt.executeUpdate();stmt.close();con.close();jTRazaoSocial.setText("");}catch(SQLExceptionex){System.out.println(ex);}
Está correto, ou fugi do padrão?
fredericomaia10
Veja este capítulo da apostila da Caelum. Se não conhece ainda, recomendo, são muito boas.
Eu recebi um exemplo de um amigo que funcionou no dele, e nem ele não acheu o motivo de n funcionar comigo.
Código da Classe do Banco:
packageSGP;importjava.sql.*;importjavax.swing.*;/** * * @author wolney */publicclassBDConnection{finalprivateStringdriver="com.mysql.jdbc.Driver";// Driver do banco de dados que sera utilizadofinalprivateStringURL="jdbc:mysql://127.0.0.1/Test";// URL que localiza bando de dadosfinalprivateStringUsuario="root";//usuario de acesso ao banco de dadosfinalprivateStringSenha="";//senha de acesso ao bando de dadosprivateConnectionconexao;publicStatementstatement;publicResultSetresultset;publicbooleanconectar()// Metodo de conexao com banco de dado{booleanresult=true;try{Class.forName(driver);conexao=DriverManager.getConnection(URL,Usuario,Senha);JOptionPane.showMessageDialog(null,"Conectado");}catch(ClassNotFoundExceptionDriver){JOptionPane.showMessageDialog(null,"Driver nao localizado"+Driver);result=false;}catch(SQLExceptionFonte){JOptionPane.showMessageDialog(null,"Deu erro na conexão"+" Com a Fonte de Dados"+Fonte);result=false;}returnresult;}publicvoiddesconecta()//Metodo que desconecta banco de dados apos ter gravado os dados{booleanresult=true;try{conexao.close();JOptionPane.showMessageDialog(null,"Banco Fechado");}catch(SQLExceptionerroSQL){JOptionPane.showMessageDialog(null,"Não foi possivel"+"Facha o banco de dados"+erroSQL.getMessage());}}publicvoidexecuteSQL(Stringsql)//Metodo que execulta a Query do SQL {try{statement=conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);resultset=statement.executeQuery(sql);}catch(SQLExceptionsqlex){JOptionPane.showMessageDialog(null,"erro ao execultar o comando sql "+sqlex.getMessage()+"Verificar comando sql "+sql);}}}
Código do botão de teste do cadastro:
try{Stringsqlinsert=("INSERT INTO test.Teste(Razao) VALUES("+jTRazaoSocial.getText()+")");bdc.statement.executeUpdate(sqlinsert);}catch(SQLExceptionex){System.out.println("Erro de SQL: "+ex);}
Bom, este botão… criei só para testar uma adição ao meu banco… a tabela tmb só possui o campo Razao. Só para testar.
Mais não deu certo… ele usa este código normalmente.