java中的SQLException:没有为参数2指定值
我在解决这个问题时遇到困难:/。当我运行我的项目时,我遇到了错误代码:没有为参数2指定值,即使所有参数都应该填写java中的SQLException:没有为参数2指定值,java,mysql,Java,Mysql,我在解决这个问题时遇到困难:/。当我运行我的项目时,我遇到了错误代码:没有为参数2指定值,即使所有参数都应该填写 public Field geefVeld(int x, int y, String spelname, int spelbordnr) { Field field = null; //connection.close(); try (Connection connectie = DriverManager.getConnection(Connectie.JD
public Field geefVeld(int x, int y, String spelname, int spelbordnr) {
Field field = null;
//connection.close();
try (Connection connectie = DriverManager.getConnection(Connectie.JDBC_URL)) {
PreparedStatement query = connectie.prepareStatement("SELECT symbool FROM field WHERE XCoord = ? and YCoord = ? and Spelbord_spel_Spelname = ? and Spelbord_VolgordeID = ?");
query.setInt(1, x);
query.setInt(2, y);
query.setString(3, spelname);
query.setInt(4, spelbordnr);
try (ResultSet rs = query.executeQuery()) {
field = new Field(rs.getString(3).charAt(0));
}
} catch (SQLException ex) {
throw new RuntimeException(ex);
} catch (Exception e) {
throw new RuntimeException(e);
}
return field;
}
调试时,我可以看到x=0,y=0,spelname=“Soraka”,spelbordnr=1(这一切都很好,因为这些值在我的数据库中是存在的)
调试时,项目停止在“query.setInt(2,y);”处
如果我忽略了一些愚蠢的事情,我很抱歉,但我已经搜索了几个小时,似乎找不到它:(
欢迎任何响应:p您在几个方面没有正确检索结果集。首先,您需要使用
next()
方法获取结果中的一行或多行。其次,您正在调用getString(3)
,其中只有一列(symbol
)在您的结果集中。第三,不要忘记关闭您的结果集。最后,您编写try
的方式有些奇怪
try {
ResultSet rs = query.executeQuery();
while(rs.next()) {
field = new Field(rs.getString(1).charAt(0));
}
rs.close();
}
我不知道这是否会解决参数设置问题,但值得一试。Thx对于响应,显然代码没有问题(或者可能仍然存在,但我不知道:/),但NetBeans有一个问题。“干净构建”由于某些原因,函数实际上无法工作,因此我需要手动删除构建(我希望我的解释是:p)没问题,我已经有一段时间没有使用这些技术了,但是,我相信您的问题在于:新字段(rs.getString(3).charAt(0));您选择的是单个列,但您尝试到达第三列。如果我没有记错的话,编号从rs getters的1开始,因此,如果错误报告器从0开始编号,则错误消息可能会告诉您缺少第二个参数。这只是一个猜测。引发了什么异常?请将完整的异常堆栈跟踪添加到你的问题。你确定YCoord在SQL表中有complitable类型吗?你知道“尝试使用资源”吗?他写
try
的方式在现代Java中是确保资源(结果集)关闭的正确方式。对于响应,显然代码没有错(或者可能仍然存在,但我不知道:/),但是NetBeans出现了一个问题。由于某些原因,“clean build”函数实际上不起作用,所以我需要手动删除该构建(我希望我有意义:p)