2017-04-26 56 views
0

我在圖書館sqlite-jdbc-3.16.1.jar的Java(eclipse)中使用sqlite數據庫。SQL增量ID,填充數據庫的第一行

我在表1 5行:ID(ID INTEGER PRIMARY KEY AUTOINCREMENT),姓名,ROW3,ROW4,ROW5

我想插入名稱,ROW3和ROW4並增加自己的ID。

public static void insertTest(String name, byte[] contentRow3, byte[] contentRow4) { 

      String sql = "INSERT INTO table1(name, contentRow3, contentRow4) VALUES(?,?,?)"; 

      try (Connection conn = connect(); 
       PreparedStatement pstmt = conn.prepareStatement(sql)) { 
       pstmt.setString(2, name); 
       pstmt.setBytes(3, contentRow3); 
       pstmt.setBytes(4, contentRow4); 
       System.out.println("Added new Person to DB"); 
       pstmt.executeUpdate(); 
      } catch (SQLException e) { 
       System.out.println(e.getMessage()); 
      } 
     } 

錯誤:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

有什麼問題嗎?

回答

2

佔位符用Java編寫的語句開始在索引1,不2.我希望下面的修正代碼應工作:

try (Connection conn = connect(); 
    PreparedStatement pstmt = conn.prepareStatement(sql)) { 
    pstmt.setString(1, name); 
    pstmt.setBytes(2, contentRow3); 
    pstmt.setBytes(3, contentRow4); 
    System.out.println("Added new Person to DB"); 
    pstmt.executeUpdate(); 
} catch (SQLException e) { 
    System.out.println(e.getMessage()); 
} 

你正在抱怨並索引位置3的例外是出界。最有可能的是,當你做的時候pstmt.setBytes(3, contentRow4)這個翻譯爲訪問第四個數組元素,假設數組索引是從零開始的,那麼它將是索引3。

+0

所以setString之後的數字不是行數? – nolags

+1

您在'PreparedStatement'上設置的值對應於SQL查詢中的問號佔位符。索引編號從1開始,並且由於您有3個問號,因此您應該設置1,2和3。 –