SQL 1064语法使用JDBC预准备语句时出错

时间:2012-01-17 15:34:37

标签: java mysql jdbc prepared-statement

我有:

String query = "INSERT INTO Basestations VALUES(?, ?, ?, ?, ?, ?, ?,"
               + "?, ?, ?, ?, ?, ?, ?, ?)";                  


PreparedStatement prep = conn.prepareStatement(query);

prep.setInt(1, profile.getNetworkId());
prep.setInt(2, profile.getBaseStationId());
prep.setInt(8, profile.getLoadLevel());
prep.setInt(11, profile.getPositionX());
prep.setInt(12, profile.getPositionY());
prep.setInt(13, profile.getPort());

prep.setDouble(3, profile.getSignalStrength());
prep.setDouble(4, profile.getFrequency());
prep.setDouble(6, profile.getMaxBitrate());
prep.setDouble(7, profile.getGuaranteedBitrate());
prep.setDouble(10, profile.getRange());

prep.setString(5, profile.getNetworkType());
prep.setString(9, profile.getProvider());
prep.setString(14, profile.getCharging());

prep.setBoolean(15, true);


prep.executeUpdate(query);

我正在接受:

INFO:SQL异常: 信息:国家:42000 信息:消息:您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以便在'?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)'附近使用正确的语法第1行 信息:错误:1064

可能出错?

3 个答案:

答案 0 :(得分:9)

当您不需要时,您将表示无效SQL语句的字符串传递给executeUpdate()方法。试着做prep.executeUpdate();

答案 1 :(得分:2)

在最后一行中,您不需要传递变量查询。

所以改变

 prep.executeUpdate(query);

有关:

 prep.executeUpdate();

答案 2 :(得分:1)

主要错误在于:

 // incorrect
 prep.executeUpdate(query);

 // correct
 prep.executeUpdate();

但请尝试将SQL放在以下格式中:

UPDATE table_name(field1, field2, field3) VALUES(?, ? ,?)

如果表格有更新,这将阻止您的代码中断。