我查了两遍为什么会这样?我有正确数量的未命名参数,列名正确。
sql语法有错误;检查与您的mariadb服务器版本相对应的手册,以了解在“?,?,?,?,?,?)”附近使用的正确语法在1号线
public void adiciona(Libro libro) {
try {
String sql = "insert into libro (isbn, titulo, precio, stock, cod_categoria, cod_editorial) values ( ? , ? , ? , ? ,?,? )";
String sqlQuery = "select count(*) from libro where isbn = " + libro.getIsbn();
sentencia = connection.createStatement();
resultSet = sentencia.executeQuery(sqlQuery);
resultSet.next();
if (resultSet.getInt(1) == 0) {
try (PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setInt(1, libro.getIsbn());
preparedStatement.setString(2, libro.getTitulo());
preparedStatement.setDouble(3, libro.getPrecio());
preparedStatement.setInt(4, libro.getStock());
preparedStatement.setInt(5, libro.getCod_categoria());
preparedStatement.setInt(6, libro.getCod_editorial());
retorno = sentencia.executeUpdate(sql);
preparedStatement.execute();
} catch (SQLIntegrityConstraintViolationException e) {
System.out.printf("error duplicado: %s\n",e);
}
catch (SQLException e) {
throw new RuntimeException(e);
}
}else if(retorno> 0) {System.out.println("added");
}else { System.out.println("no added.");}
}catch (SQLException e) {
throw new RuntimeException(e);
}
}
3条答案
按热度按时间2exbekwf1#
你可能编辑了问题,尝试了一些东西。一个干净的版本是:
vq8itlhq2#
您有一个不必要的行,它执行“sql”而不传递参数。删除这两行中的第一行,因为绑定变量包含在第二行中:
iqih9akk3#
在
retorno = sentencia.executeUpdate(sql);
尝试删除参数sql