Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的SQLException:没有为参数2指定值_Java_Mysql - Fatal编程技术网

java中的SQLException:没有为参数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

我在解决这个问题时遇到困难:/。当我运行我的项目时,我遇到了错误代码:没有为参数2指定值,即使所有参数都应该填写

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)