Erro de sintaxe na instrução INSERT INTO

5 respostas
WashingtonBotelho

A persistência insiste em dar erro de sintaxe, mas já olhei e reolhei tanto o banco.mdb quanto o código e nada. =/
[Edited:]Pra ser mais específico, ele já da erro no inserir da Consulta, nem chega no enserir Prontuario.

public void inserir(Consulta consSet) throws SQLException {
    con.conectar();

    ps = con.getConn().prepareStatement(
            "INSERT INTO Consulta (codPac, codMed, desc, data, hora)" +
            " VALUES (?, ?, ?, ?, ?");

    ps.setInt(1, consSet.getCodPac());
    ps.setInt(2, consSet.getCodMed());
    ps.setString(3, consSet.getDesc());
    ps.setDate(4, consSet.getData());
    ps.setTime(5, consSet.getHora());

    ps.executeUpdate();
    ps.close();
    con.desconectar();

    pronDao.inserir(consSet.getProntuario()); // Passo o Prontuario desta Consulta para ser setado.
  }
codCons [Numeração Automática] codPac [Número] codMed [Número] desc [Texto] data [Data/Hora] hora [Data/Hora] Entrada: 22 18 Descrição. 2008-06-08 08:00:00
public void inserir(Prontuario pronSet) throws SQLException {
    con.conectar();

    // Próximo codCons a ser preenchido, codPron fica igual.
    ps = con.getConn().prepareStatement("SELECT MAX(codCons) FROM Consulta");
    rec = ps.executeQuery();
    rec.next();
    nextCodCons = rec.getInt(1);

    ps = con.getConn().prepareStatement(
            "INSERT INTO Prontuario (codPron, nomePac, data, relat)" +
            " VALUES (?, ?, ?, ?)");

    ps.setInt(1, nextCodCons);
    ps.setString(2, pronSet.getNomePac());
    ps.setDate(3, pronSet.getData());
    ps.setString(4, pronSet.getRelat());

    ps.executeUpdate();
    ps.close();
    con.desconectar();
  }
codPron [Número] nomePac [Texto] data [Data/Hora] relat [Texto]

Entrada:
Kotó
2008-06-08
null ainda

5 Respostas

lucasap2005

Primeiro: utilizar ps.execute()
Segundo: Poste o erro, pode ser N motivos o problema, sem o erro não tem como sabermos.
Flw

WashingtonBotelho

O erro esta no Título e falei também que era de sintáxe.

O que mais me encabula, é que fiz o cadastro de médico, atendente e paciente do mesmo jeito e deu certo.
O executeUpdate() é voltado para (DML), INSERT, UPDATE ou DELETE, já o executeQuery() retorna um ResultSet para SELECT. O execute() no qual falou somente consegue capturar tanto um quanto o outro, e muda-lo não adianta. =/

Jairo_Junior

Washing,
o erro realmente é de sintáxe, dá uma olhada com mais cuidado para teu SQL. E da próxima vez cola o stack do erro.

ps = con.getConn().prepareStatement( "INSERT INTO Consulta (codPac, codMed, desc, data, hora)" + " VALUES (?, ?, ?, ?, ?)");

Tenta utilizar o código acima.

E

experimente passar os parametros em variaveis, exemplo:

stmt = (Statement) con.createStatement();

String sql = insert into clientes (nome,endereco,telefone,cidade) values (’”+nome+"’,’"+endereco+"’,’"+telefone+"’,’"+cidade+"’);";

stmt.execute(sql);
WashingtonBotelho

Alguém também tem a mesmo pensamento do que eu? “Os piores problemas sempre estão nos menores erros”.

1º - Estava faltando um fecha parênteses ‘)’ no VALUES. “Mas somente isto não resolveu”.
2º - Estava dando erro com questões de chaves primárias automáticas.

O Access não volta a chava se você deletar uma linha, então como eu ficava fazendo testes de inserção e deletando linha causou váriso problemas, pois estava manipulando o banco na mão. Logo pensei em recriar o banco do zero e funcionou.

Muito obrigado mesmo ao Lucas, Edumillani e ao Jairo.

  • Dica: Quando forem trabalhar com o Access sempre deixa de backup um banco em branco sem ter nenhuma inserção feita antes. =]

Obrigado denovo. :wink:

Criado 8 de junho de 2008
Ultima resposta 8 de jun. de 2008
Respostas 5
Participantes 4