2017-04-26 6 views
0

J'ai une base de données sqlite en java (eclipse) avec la bibliothèque sqlite-jdbc-3.16.1.jar.Identifiant d'incrémentation SQL, remplissage de la première ligne de la base de données

J'ai 5 lignes: id table1 (ID entier PRIMARY KEY AUTOINCREMENT), nom, Row3, row4, row5

Je veux insérer le nom, row3 et row4 et l'ID s'incrémenter.

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()); 
      } 
     } 

Erreur: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3

Quel est le problème ici?

Répondre

2

Placeholders en Java préparés déclarations commencent à l'index 1, et non 2. Je pense que le code corrigé devrait fonctionner:

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()); 
} 

L'exception que vous obtenez se plaint que la position de l'index 3 est hors des limites. Probablement, sous le capot lorsque vous avez fait pstmt.setBytes(3, contentRow4) cela traduit à l'accès quatrième élément de tableau, ce qui serait l'indice 3 en supposant que l'indexation de tableau est basé sur zéro.

+0

donc le nombre après setString n'est pas le numéro de ligne? – nolags

+1

Les valeurs que vous avez définies dans 'PreparedStatement' correspondent aux espaces réservés aux points d'interrogation dans votre requête SQL. L'indexation commence à 1, et puisque vous avez 3 points d'interrogation, vous devriez donc régler 1, 2 et 3. –