Erro PreparedStatemente

6 respostas
N

Boa tarde!

Estou criando um pequeno sistema de locação de veiculos e na persistência estou utilizando PreparedStatement conforme abaixo um trecho do método para inserir carros.

sql = "insert int tb_carro values (null, ?, ?, ?)"; PreparedStatement psmt = conn.PrepareStatement(sql) psmt.setString(1, carro.getNome()); psmt.setString(2, carro.getPlaca()); psmt.setString(3, carro.getChassi());

Porém quando ele vai executar o método ele retornar que a Syntax sql possui erro infornado que ‘?’ não é um valor válido, ou seja o métodos setString, setInt e etc não estão fazendo a substituição do parametro pelo valor.
Alguem pode me dar uma ajuda com este problema? :shock:

Obrigado!

6 Respostas

ManoJava

Boa tarde!!

Por exemplo aqui:

sql = "insert int tb_carro values (null, ?, ?, ?)";

Deveria ser assim né :

sql = "insert into tb_carro values (null, ?, ?, ?)";

Att

N

É, neste caso só esqueci o “O” mas no código está certo, pois sempre crio a string sql primeiro no SGBD para depois passar para o fonte do Java substituindo pelos parametros “?”.

ManoJava

e pq vc passa null nesse primeiro parametro? o que te retorna o indice(0) ?, posta o restante do codigo, com as linhas onde vc abre a conexão e faz o executeUpdate().

Att

N
//Conexão Banco de Dados
private static Connection conexaoDb() throws ClassNotFoundException, SQLException {
        String hostname = "localhost";
        String login = "root";
        String senha = "";
        String dbname = "locadora";
        String url = "jdbc:mysql://" + hostname + "/" + dbname;
        Connection conexao = null;
        Class.forName("com.mysql.jdbc.Driver");
        conexao = (Connection) DriverManager.getConnection(url, login, senha);
        return conexao;
    }

// Método para inserção de carro o valor null passado é devido a chave primaria ser Auto increment.
// Como não estou especificando o nome das colunas que irei inserir os valores.

// Atributos de carro na Tabela 
// Int AI idCarro, String not null marcarCarro, String not null modeloCarro, Int not null anoCarro, 
// String not null chassiCarro, String not null corCarro, String desConservacaoCarro

    protected static boolean inserirCarro(Carro c) throws ClassNotFoundException, SQLException {
        int result;
        Connection conn = conexaoDb();
        sql = "insert into tb_carro values(null,?,?,?,?,?,?,?)";
        psmt = conn.prepareStatement(sql);
        psmt.setString(1, c.getFabricanteCarro());
        psmt.setString(2, c.getModeloCarro());
        psmt.setInt(3, c.getAnoCarro());
        psmt.setString(4, c.getPlaca());
        psmt.setString(5, c.getChassiCarro());
        psmt.setString(6, c.getCorCarro());
        psmt.setString(7, c.getDesEstadoConservacaoCarro());
        result = psmt.executeUpdate(sql);
        psmt.close();
        conn.close();
        if (result >= 1) {
            return true;
        } else {
            return false;
        }
    }
pmlm
nero.rodrigues:
result = psmt.executeUpdate(sql);
Sem parametros...
result = psmt.executeUpdate();
N

Resolvido. Obrigado!

Criado 5 de dezembro de 2011
Ultima resposta 22 de dez. de 2011
Respostas 6
Participantes 3