【问题标题】:ArrayOutOfBoundsException in PreparedStatement methodPreparedStatement 方法中的 ArrayOutOfBoundsException
【发布时间】:2015-03-10 15:27:04
【问题描述】:

我创建了一个在 Java 中执行值数组的方法。每当我尝试运行它时,都会遇到 ArrayOutOfBoundsException。我的控制台将错误指向 是“if”语句。

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 [])无法正常工作,我最终只会遇到此方法的问题。我使用这种方法从“用户”表中插入和删除不同的数据。我在这里有4个参数,第一个是ID(它是auto_generated并作为主键。第二个参数是我的用户名,第三个是用户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) ~[?:?]

如果你们理解我的解释有问题,请向我寻求更好的解释。

【问题讨论】:

标签: java sql arrays jdbc prepared-statement


【解决方案1】:

数组的索引是从零开始的,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]);
    }
}

【讨论】:

    猜你喜欢
    • 2015-05-07
    • 2015-03-01
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-08-07
    • 2016-07-23
    • 1970-01-01
    相关资源
    最近更新 更多