Erro no INSERT

4 respostas
W

Bom dia !

Estou com um erro no insert do método inserirDisciplina, alguém pode me ajudar?

public class ConexaoDAO {

    public static void inserirAluno(Aluno aluno) {

        Connection con = Conexao.conectar();

        String insert = "INSERT INTO aluno(nome,endereco,telefone,mediaFinal) VALUES (?,?,?,?)";

        try {

            PreparedStatement ps = con.prepareStatement(insert);
            ps.setString(1, aluno.getNome());
            ps.setString(2, aluno.getEndereco());
            ps.setInt(3, aluno.getTelefone());
            ps.setDouble(4, aluno.getMediaFinal());
            ps.execute();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void inserirProfessor(Aluno aluno) {
        Connection con = Conexao.conectar();

        String insert = "INSERT INTO professores(nome,titularizacao) VALUES (?,?)";

        try {

            PreparedStatement ps = con.prepareStatement(insert);
            ps.setString(1, aluno.getProfessor().getNome());
            ps.setString(2, aluno.getProfessor().getTitularizacao());
            ps.execute();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void inserirDisciplina(Aluno aluno) {
        int codProfessor = 0;
        int codAluno = 0;

        Connection con = Conexao.conectar();        

        try {

            String consultaP = "SELECT idprofessores FROM professores WHERE nome = '"+aluno.getProfessor().getNome()+"'";

            PreparedStatement ps = con.prepareStatement(consultaP);
            ResultSet rs = ps.executeQuery();
            if (rs.next()) {
                codProfessor = rs.getInt(1);
            }

            String consultaD = "SELECT idAluno FROM aluno WHERE nome = '"+aluno.getNome()+"'";

            PreparedStatement pst = con.prepareStatement(consultaD);
            ResultSet rst = pst.executeQuery();
            if (rst.next()) {
                codAluno = rst.getInt(1);
            }
            
            String insert = "INSERT INTO disciplina(nome,data,"+codProfessor+","+codAluno+") "+"VALUES(?,?,?,?)";
            
            PreparedStatement p = con.prepareStatement(insert);
            p.setString(1, aluno.getDisciplina().getNome());
            p.setString(2, aluno.getDisciplina().getData());
            p.setInt(3, codProfessor);
            p.setInt(4, codAluno);
            p.execute();
            con.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

STACK TRACE

m.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 12,13) VALUES(Pintura,1111,12,13) at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:532)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)

at com.mysql.jdbc.Util.getInstance(Util.java:382)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362)

at BancoDAO.ConexaoDAO.inserirDisciplina(ConexaoDAO.java:90)

at bancodados.BancoDados.main(BancoDados.java:67)

Eu sei que o problema é na sintaxe do insert do método inserirDisciplina, mas não consegui achar o erro. Já verifiquei espaços entre outros, fiz um teste imprimindo a String insert
pra ver como estar os espaços tudo correto, já fiz o próprio comando no banco de dados pra ver se tem alguma falha e nada. Verifiquei os nomes das colunas com a aplicação e nada de errado.

4 Respostas

esdmorais

Linha 68:

String insert = "INSERT INTO disciplina(nome,data,"+codProfessor+","+codAluno+") "+"VALUES(?,?,?,?)";

Ao invés de passar o codProfessor e codAluno, não deve ser o nome dos campos?

yoshikichi

O que acontece é que vc esta setando na query nome de campos que não existe.
por exemplo:

String nomeCampo ="essa campo na tabela nao existe";
//se vc criar um query assim:
String insert = "INSERT INTO disciplina(nome,data,"nome_q_nao_existe",nomeCampo ) "+"VALUES(?,?,?,?)";  
//repare que
insert .toString().equals("INSERT INTO disciplina(nome,data,nome_q_nao_existe, essa campo na tabela nao existe) VALUES(?,?,?,?)") //será true
//ou seja pelo que analisei sua query deveria ser
String insert = "INSERT INTO disciplina(nome,data,codProfesso, codAluno) "+"VALUES(?,?,?,?)";
W

esdmorais mais uma vez obrigado, era isso mesmo.

Um abraço e obrigado pela sua ajuda, problema resolvido.

W

yoshikichi:
O que acontece é que vc esta setando na query nome de campos que não existe.
por exemplo:

String nomeCampo ="essa campo na tabela nao existe"; //se vc criar um query assim: String insert = "INSERT INTO disciplina(nome,data,"nome_q_nao_existe",nomeCampo ) "+"VALUES(?,?,?,?)"; //repare que insert .toString().equals("INSERT INTO disciplina(nome,data,nome_q_nao_existe, essa campo na tabela nao existe) VALUES(?,?,?,?)") //será true //ou seja pelo que analisei sua query deveria ser String insert = "INSERT INTO disciplina(nome,data,codProfesso, codAluno) "+"VALUES(?,?,?,?)";

String insert = "INSERT INTO disciplina(nome,data,codProfessor,codAluno) VALUES(?,?,?,?)";
            
            PreparedStatement p = con.prepareStatement(insert);
            p.setString(1, aluno.getDisciplina().getNome());
            p.setString(2, aluno.getDisciplina().getData());
            p.setInt(3, codProfessor);
            p.setInt(4, codAluno);
            p.execute();
            con.close();

Na verdade o campo codProfessor e codAluno existem na tabela dessa forma mesmo, o problema que estava concatenando com outra string coloquei ela como parte de uma String
e setei com :

p.setInt(3, codProfessor);
  p.setInt(4, codAluno);

pois VALUES (?,?,?,?).

Mas obrigado pela atenção…

Criado 16 de junho de 2011
Ultima resposta 16 de jun. de 2011
Respostas 4
Participantes 3