本文介绍了java.sql.SQLException:参数索引超出范围(1个参数数目,即0).在使用PreparedStatement时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Java/MariaDb中使用prepareStatement,如以下函数所示

Using preparedStatement in Java/MariaDb as in the following function

public ArrayList<String> findPath(String roomName) throws SQLException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException
{
    ArrayList<String> path = new ArrayList<String>();
    connection = getConnection();
    String queryPattern = "SELECT `Livello_1`, `Livello_2`, `Livello_3`, `Livello_4` FROM Camera WHERE Camera.Nome = '?'";
    PreparedStatement queryStatement = connection.prepareStatement(queryPattern);
    queryStatement.setString(1, roomName);
    ResultSet rs = queryStatement.executeQuery();
    if(rs.next())
    {
        for(int i = 0; i < 3; i++)
        {
            path.add(rs.getString(i));
        }
    }
    return path;
}

我收到错误消息:

,错误行号指向行

queryStatement.setString(1, roomName);

推荐答案

正如评论中提到的,您应该删除?中的引号.

As was mentioned in the comment, you should remove the quotes from the ?.

此外,在 rs.getString(i)中, i 应该为正.从1开始循环计数.

In addition, in rs.getString(i), i should be positive. Start the count of the loop from 1.

总结:

public ArrayList<String> findPath(String roomName) throws SQLException, IOException, InstantiationException, IllegalAccessException, ClassNotFoundException
{
    ArrayList<String> path = new ArrayList<String>();
    connection = getConnection();
    String queryPattern = "SELECT Livello_1, Livello_2, Livello_3, Livello_4 FROM Camera WHERE Camera.Nome = ?";
    PreparedStatement queryStatement = connection.prepareStatement(queryPattern);
    queryStatement.setString(1, roomName);
    ResultSet rs = queryStatement.executeQuery();
    if(rs.next())
    {
        for(int i = 1; i < 4; i++)
        {
            path.add(rs.getString(i));
        }
    }
    return path;
}

这篇关于java.sql.SQLException:参数索引超出范围(1个参数数目,即0).在使用PreparedStatement时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-04 13:50