2012-01-17 62 views
2

我:SQL使用JDBC 1064语法错误预处理语句

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); 

和我得到:

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

什么可能是错的?

+0

这将有助于了解出现错误时设置的值。 – 2012-01-17 15:38:04

回答

10

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

2

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

因此改变

prep.executeUpdate(query); 

为:

prep.executeUpdate(); 
1

主要错误是在这里:

// incorrect 
prep.executeUpdate(query); 

// correct 
prep.executeUpdate(); 

但请尽量把你的SQL以下形式:

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

如果表中有更新,这将防止代码崩溃。