PreparedStatement方法中的ArrayOutOfBoundsException

时间:2015-03-10 15:27:05

标签: java sql arrays jdbc prepared-statement

我创建了一个在Java中执行值数组的方法。每当我尝试运行它时,我最终会得到一个ArrayOutOfBoundsException。我的控制台将错误指向 作为"如果"言。

for (int i = 1; i <= array.length; i++) {
        if (array[i] instanceof String) {
            ps.setString(i, (String) array[i]);
        } else if (array[i] instanceof Integer) {
            ps.setInt(i, (int) array[i]);
        }
    }

我之前的Connection或PreparedStatement没问题。我最终只是遇到了这个方法的问题,因为数组(Object [])无法正常工作。我使用这种方法从&#34; user&#34;中插入和删除不同的数据。表。我在这里取4个参数,首先是ID(自动生成并作为主键。第二个参数是我的用户名,第三个是用户UUID,最后一个是用户的排名(有点访问级别)。我期待第一个(ID)在每次插入后自动生成后都不计算。所以不要指望我们。以下是我如何使用该方法的示例:

executeQuery("INSERT INTO `user` (`name`, `uuid`, `rank`) VALUES (?, ?, ?)", new Object[]{"'username'", "'myUUID'", 64});

所以在我执行了这个方法之后,我最终错误地告诉了我:

java.lang.ArrayIndexOutOfBoundsException: 3
        at com.java.tarjeihs.plugin.mysql.MySQLAccessor.executeQuery(MySQLAccessor.java:107) ~[?:?]
        at com.java.tarjeihs.plugin.user.UserHandler.test(UserHandler.java:24) ~[?:?]

如果你们在理解我的解释时遇到问题,请向我询问更好的解释。

1 个答案:

答案 0 :(得分:2)

数组的索引是零基础的,PreparedStament是一个基于索引的,所以你在一个一个问题上失败了:

for (int i = 0; i < array.length; i++) {
    if (array[i] instanceof String) {
        ps.setString(i + 1, (String) array[i]);
    } else if (array[i] instanceof Integer) {
        ps.setInt(i + 1, (int) array[i]);
    }
}