簡體   English   中英

PreparedStatement方法中的ArrayOutOfBoundsException

[英]ArrayOutOfBoundsException in PreparedStatement method

我制作了一種用於在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沒有問題。 由於array(Object [])不能正常工作,我最終只能遇到這種方法的問題。 我使用這種方法從“用戶”表中插入和刪除不同的數據。 我在這里采用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) ~[?:?]

如果你們在理解我的解釋時遇到問題,請要求我提供更好的解釋。

數組的索引基於零,而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]);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM