PreparedStatement - Não acho o erro

5 respostas
R
package usodeParametros;

import java.sql.PreparedStatement;
import java.sql.DatabaseMetaData;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class usodeParametros {

    public static void main(String args[]) {
        try {
            String url = "jdbc:mysql://localhost:3306/acessodb";
            String usuario = "root";
            String senha = "123";
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection(url, usuario, senha);
            DatabaseMetaData dbmd = con.getMetaData();
            System.out.println("Conectado");
            System.out.println("Versão do Driver JDBC = " + dbmd.getDriverName() + "\n"
                    + "Versão do Banco de Dados = " + dbmd.getDatabaseProductVersion() + "\n"
                    + "Nome do Banco de Dados = " + dbmd.getDatabaseProductName());

            PreparedStatement st = con.prepareStatement("SELECT*"
                    + "FROM Turmas"
                    + "WHERE Codigo_Turma =?");

            st.setString(1,"1");            
            ResultSet rs = st.executeQuery();
            
            while (rs.next()) {
                System.out.println(rs.getString("Código_Turma"));
                System.out.println(rs.getString("Descricao"));
            }
            
            rs.close();
            st.close();            
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }
}
Tabelas devidamente criadas no MySQL. Erro:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='1'' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2625)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2281)
at usodeParametros.usodeParametros.main(usodeParametros.java:29)

5 Respostas

marcelo.silva

sua query esta assim

SELECT*FROM TURMASWHERE CODIGO_TURMA =?

É POR ISSO, DÊ ESPAÇO DO SELECT PARA O *, DO * PRO FROM E DO TURMAS PRO WHERE

R

Valeu Marcelo era isso mesmo. Que erro tosco!! :confused:

wspinheiro

O Seu codigo_turma é do tipo numerico não ??

Aqui tem erro: st.setString(1,“1”);

Em situações normais aqui também:

System.out.println(rs.getString(“Código_Turma”));

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

 public class usodeParametros {  
   
     public static void main(String args[]) {  
         try {  
             String url = "jdbc:mysql://localhost:3306/acessodb";  
             String usuario = "root";  
             String senha = "123";  
             Class.forName("com.mysql.jdbc.Driver");  
             Connection con = DriverManager.getConnection(url, usuario, senha);  
             DatabaseMetaData dbmd = con.getMetaData();  
             System.out.println("Conectado");  
             System.out.println("Versão do Driver JDBC = " + dbmd.getDriverName() + "\n"  
                     + "Versão do Banco de Dados = " + dbmd.getDatabaseProductVersion() + "\n"  
                     + "Nome do Banco de Dados = " + dbmd.getDatabaseProductName());  
   
             PreparedStatement st = con.prepareStatement("SELECT*FROM TURMAS WHERE codigo_turma = ?");  
   
             st.setLong(1,4);//aqui vc poe um codigo_turma que tem no banco sacou????              
             ResultSet rs = st.executeQuery();  
               
             while (rs.next()) {  
                 System.out.println(rs.getString("codigo_turma"));  
                 System.out.println(rs.getString("Descricao"));  
             }  
               
             rs.close();  
             st.close();              
         } catch (Exception e) {  
             e.printStackTrace(System.err);  
         }  
     }  
 }
wspinheiro

Outra coisa o nome da Classe:

Primeira Letra Maiúscula, palavra composta cada inicial maiuscula… camel case (POR CONVENÇÃO).
O correto seria UsoDeParametros.

E discordo da solucao ter sido apenas os espaços tinha erro:
acusado na exception:


com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘=‘1’’ at line 1

Aqui tem erro: st.setString(1,“1”);

Abraço!

R
<blockquote><div class="quote-author">wspinheiro:</div>O Seu codigo_turma é do tipo numerico não ??

Aqui tem erro:  st.setString(1,“1”);

Em situações normais aqui também:

System.out.println(rs.getString(“Código_Turma”));

</blockquote>

wspinheiro, Realmente, é númerico, testei duas duas maneiras e funcionou com st.setString(1,“1”); e setInt(1,1), como eu  não sei.

wspinheiro:
Outra coisa o nome da Classe:
Primeira Letra Maiúscula, palavra composta cada inicial maiuscula… camel case (POR CONVENÇÃO).
O correto seria UsoDeParametros.

Devidamente corrigido.
Valeu

Criado 2 de agosto de 2011
Ultima resposta 2 de ago. de 2011
Respostas 5
Participantes 3