Até ai blz, ta conectando…Agora eu gostaria de fazer o seguinte, criar ma classe q vai inserir dados no banco. Criei a classe e fiz ela extender a Conecta BD.
publicclassTesteextendsConcectaBD{publicvoidteste()throwsSQLException{try{rs=stm.executeQuery("Insert into usuarios(user,password)values('teste','teste')");}catch(SQLExceptione){e.printStackTrace();}}
O erro q aparece é o seguinte:
java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:438)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1379)
at locadora.Renan.Login.teste(Login.java:18)
at locadora.Renan.Teste.main(Teste.java:13)
alguem pode dar uma luz?
Até ai blz, ta conectando…Agora eu gostaria de fazer o seguinte, criar ma classe q vai inserir dados no banco. Criei a classe e fiz ela extender a Conecta BD.
publicclassTesteextendsConcectaBD{publicvoidteste()throwsSQLException{try{rs=stm.executeQuery("Insert into usuarios(user,password)values('teste','teste')");}catch(SQLExceptione){e.printStackTrace();}}
O erro q aparece é o seguinte:
java.sql.SQLException: Can not issue data manipulation statements with executeQuery().
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
at com.mysql.jdbc.StatementImpl.checkForDml(StatementImpl.java:438)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1379)
at locadora.Renan.Login.teste(Login.java:18)
at locadora.Renan.Teste.main(Teste.java:13)
alguem pode dar uma luz?
Renan,
Pelo que vi, em momento nenhum você está passando uma conexão para que o Result Query possa ser executado.
Uma instrução de INSERT não vai devolver um ResultSet. Em vez de executeQuery, usa o método executeUpdate.
R
Renan4000
então descubri o problema o codigo esta da seguinte forma
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjavax.swing.JOptionPane;publicclassConectaBD{Connectionc=null;privateStringdriverName="com.mysql.jdbc.Driver";privateStringbancoDeDados="jdbc:mysql://localhost/locadora";privateStringuser="admin";privateStringpassword="teste";Statementstm;ConectaBD(){try{Class.forName(driverName);c=DriverManager.getConnection(bancoDeDados,user,password);stm=c.createStatement();JOptionPane.showMessageDialog(null,"Conectado!");}catch(SQLExceptione){e.printStackTrace();JOptionPane.showMessageDialog(null,"Problemas de conexão com o banco de dados");}catch(ClassNotFoundExceptione){e.printStackTrace();}}}
Agora gostaria de fazer um select:
publicclassLoginextendsConectaBD{ResultSetrs;publicvoidteste()throwsSQLException{Stringuserd="33d";rs=stm.executeQuery("SELECT user from usuarios where user = userd");while(rs.next()){Stringusert=rs.getString("user");System.out.println("user: "+usert);}}
O problema é que a query(SELECT user from usuarios where user = userd) nao reconhece a String userd. OBS: ja tentei colocar aspas simples
alguem pode me dar uma luz? :(
R
Renan4000
bom, descubri q o problema é na query ela nao esta reconhecendo a String user
Já tentei isso:
rs=stm.executeQuery("SELECT user from usuarios where user like "+userd);//ERRO:Unknowncolumn'33d'in'where clause'rs=stm.executeQuery("SELECT user from usuarios where user = userd");//ERRO:Unknowncolumn'userd'in'where clause'rs=stm.executeQuery("SELECT user from usuarios where user = 'userd'");//ERRO:resultadonulo,naoencontranenhumregistronoBDrs=stm.executeQuery("SELECT user from usuarios where user = '33d'");//ERRO:resultado33d,maisnaouseivariaveleoobjetivoéusarvarialnaqueryrs=stm.executeQuery("SELECT user from usuarios where: user = 'userd'");//ERRO:YouhaveanerrorinyourSQLsyntaxrs=stm.executeQuery("SELECT user from usuarios where user = \"userd\" ");//ERRO:resultadonulo,naoencontranenhumregistronoBDrs=stm.executeQuery("SELECT user from usuarios where user = "+userd);//ERRO:Unknowncolumn'33d'in'where clause'rs=stm.executeQuery("SELECT * from usuarios");
Alguem sabe me dizer qual é a maneira certa de fazer essa query?
O
orlandini
("SELECT user from usuarios where user = ' "+userd+" ' ")
Repare nos ‘pliques’ acho que é assim o nome, aspas simples sei la !!!
R
Renan4000
Opa cara eu consegui ja. tinha perguntado para um amigo meu ele me passou a mesma que voce passou mais é o seguinte
rs=stm.executeQuery("SELECT user from usuarios where user like ' "+userd+" ' ");
o certo é tirar todos os espaços senão vai retornar zero
rs=stm.executeQuery("SELECT user from usuarios where user like '"+userd+"'");
valeu obrigado mesmo
O
orlandini
Pode crer, ele ia procurar por (espaco)userd(espaco) :D!
Tentei colocar assim pra visualizar melhor so que acabei errando
Abraços
pmlm
Dá uma vista de olhos em PreparedStatement.
É mais seguro e mais rápido.
kemperacc
Renan4000:
Opa cara eu consegui ja. tinha perguntado para um amigo meu ele me passou a mesma que voce passou mais é o seguinte
rs=stm.executeQuery("SELECT user from usuarios where user like ' "+userd+" ' ");
o certo é tirar todos os espaços senão vai retornar zero
rs=stm.executeQuery("SELECT user from usuarios where user like '"+userd+"'");
valeu obrigado mesmo
Amigo, nao faz isso ai nao, da a maior zica…
Deixa o jdbc interpretar a string corretamente, senao voce corre riscos de SQL INJECT, so pra comecar a enumerar os problemas…
É melhor fazer assim:
PreparedStatementps=connection.prepareStatement("SELECT user from usuarios where user like ?");ps.setString(1,"NOME DO USUARIO");rs=ps.executeQuery();
Obs - Voce pode colcoar quantas ? quiser, por exemplo:
PreparedStatementps=connection.prepareStatement("SELECT user from usuarios where user like ? and senha = ? and ativo = ?");ps.setString(1,"NOME DO USUARIO");ps.setString(2,"9a098a");ps.setBoolean(3,true);rs=ps.executeQuery();
[]s
Kemper
R
Renan4000
PreparedStatementps=connection.prepareStatement("SELECT user from usuarios where user like ? and senha = ? and ativo = ?"); ps.setString(1,"NOME DO USUARIO"); ps.setString(2,"9a098a"); ps.setBoolean(3,true); rs=ps.executeQuery();
seria a mesma coisa q isso?
"SELECT user from usuarios where user like 'NOME DO USUARIO' and senha = '9a098a' and ativo = 'true' ";
kemperacc
Renan4000:
PreparedStatement ps = connection.prepareStatement("SELECT user from usuarios where user like ? and senha = ? and ativo = ?");
ps.setString(1, "NOME DO USUARIO");
ps.setString(2, "9a098a");
ps.setBoolean(3, true);
rs = ps.executeQuery();
seria a mesma coisa q isso?
"SELECT user from usuarios where user like 'NOME DO USUARIO' and senha = '9a098a' and ativo = 'true' ";
Sim, mas a performance eh melhor porque voce pode declarar a sua PreparedStatement na classe e deixa-la instanciada ja que a string eh fixa, assim quando precisar usa-la voce so passa o parametro, outra coisa, ela ja trata as strings, os numeros, etc.
Por exemplo, isso daria erro do jeito que voce esta fazendo:
StringnomeUsuario="teste 'causa erro";Stringsenha="123456";Booleanativo=false;Stringsql="SELECT user from usuarios where user like '"+nomeUsuario+"' and senha = '"+senha+"' and ativo = '"+ativo+"' ";System.out.println(sql);//ResultadoSELECTuserfromusuarioswhereuserlike'teste'causaerro'andsenha='123456'andativo='false'";
Voce usando PreparedStatment ele ja trata essas aspas e qq outro caractere que possa causar erro na consulta.