2016-05-06 2 views
0

Je traduis la fonction à l'application fluide L'application utilise PreparedStatement pstmt pour insérer Tableau chaîne de deux dimention, quand je fais commencer, des problèmes sont apparus comme la photoinsérer des données Java dans la base de données Mysql

import java.sql.PreparedStatement; 

public static void main(String[] args){ 

java.sql.Connection conn = java.sql.DriverManager.getConnection(
     url, user, password); 

la Chaîne de caractères à écrire dans la base de données.

String[][] sheetContent={{"100007"," 钢笔", "200", "xxx"},{"100020", "鞋子","700", "AAA"}}; 
int rows=2; 
int columns = 4; 
String sql = "INSERT INTO product(编号,商品名,单价,提供商) VALUES(?,?,?,?)"; 
PreparedStatement pstmt = conn.prepareStatement(sql); 
     for(int r=0;r<rows;r++){ 
      for(int c=0;c<columns;c++){ 
       pstmt.setString(c, sheetContent[r][c]); 
      } 
     } 
pstmt.executeUpdate(); 

enter image description here

+0

Les index de 'setString()' sont basés sur 1, et non sur 0. Lisez le [javadoc] (https://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html#setString%28int,%20java.lang.String%29). – Andreas

Répondre

1

vous devriez commencer l'index of preparedStatement de 1, Qu'est-ce que vous êtes oing est à partir de 0.

index = moût entier commence avec l'index 1.

pstmt.setString (index, sheetContent [r] [c]);

exemple: pstmt.setString (1, sheetContent [r] [c]); pstmt.setString (2, sheetContent [r] [c]);

+0

Correctement ce que vous avez dit – yao

1

Vous devez être intelligent avec la façon dont vous utilisez vos indices de colonne:

PreparedStatement pstmt = conn.prepareStatement(sql); 
for (int r=0; r < rows; r++) { 
    for (int c=0; c < columns; c++) { 
     int index = 1 + (r * columns) + c; 
     pstmt.setString(index, sheetContent[r][c]); 
    } 
} 
pstmt.executeUpdate(); 
+0

Pourquoi '(r * columns)' serait-il nécessaire? Cela augmenterait l'index de paramètre basé sur l'index de rangée; cela ne semble pas correct. – Cascader

+0

En dépit de mon commentaire concernant la rectitude, je crois que le PO devrait suggérer une modification à la réponse de Tim qui pointait vers la bonne direction au lieu d'afficher sa propre réponse. Je reviendrais sur la réponse corrigée de Tim. – Cascader

+0

@Cascader Merci de me défendre mon pote. L'idée derrière ma réponse est de traduire deux dimensions (ligne, colonne) en un seul indice de dimension que l'instruction préparée nécessite. C'est tout ce qu'il y a à faire. –

-1

Les problèmes ont été solved.Just changer le code comme suit

for (int r=0; r < rows; r++) { 
    for (int c=0; c < columns; c++) { 
     int index = 1 + c; 
     pstmt.setString(index, sheetContent[r][c]); 
    } 
pstmt.executeUpdate(); 
} 
+1

n'est-ce pas la même chose que la réponse de @ tim-biegeleisen? Vous devriez accepter cette réponse au lieu de l'afficher. – e4c5

+0

Pourquoi voudrais-tu voler ma réponse? –

+0

Votre idée est bonne, mais pas correcte.Alors je change votre idée avec mon code – yao