2010-12-22 5 views
-4

Salut Guys le code suivant me jette une erreur j'ai une instruction d'insertion créée une fois et dans la boucle while je suis paramètre dynamiquement de réglage, et à la fin, je dit ps2.addBatch() encore le code qui crée insert dynamiqueJava Préparé Instruction Erreur

rs = st.executeQuery("SELECT column_name FROM all_tab_cols 
where lower(table_name)= '" + tableName + "' order by column_id"); 
sql = new StringBuffer(300); 
sql.append("insert into ").append(tableName).append("("); 
String prefix=""; 
while (rs.next()) 
{ 
sql.append(prefix).append(rs.getString("column_name")); 
values.append(prefix).append("?"); 
prefix= ","; 

} 
sql.append(") values(").append(values).append(")"); 
ps2 = conn.prepareStatement(sql.toString()); 

while ((eachLine = in.readLine()) != null)) 
{ 
    for (int k=stat; k <=45;k++) 

{ 
    ps2.setString (k,main[(k-2)]); 
} 
stat=45; 
for (int l=1;l<= 2; l++) 
{ 
    ps2.setString((stat+l),pdp[(l-1)]);// Exception          
} 

ps2.addBatch(); 

}

C'est l'erreur

java.lang.ArrayIndexOutOfBoundsException: 45 à oracle.jdb c.dbaccess.DBDataSetImpl._getDBItem (DBDataSetImpl.java:378) à oracle.jdbc.dbaccess.DBDataSetImpl._createOrGetDBItem (DBDataSetImpl.java:781) à oracle.jdbc.dbaccess.DBDataSetImpl.setBytesBindItem (DBDataSetImpl.java: 2450) à oracle.jdbc.driver.OraclePreparedStatement.setItem (OraclePreparedStatement.java:1155) à oracle.jdbc.driver.OraclePreparedStatement.setString (OraclePreparedStatement.java:1572) à Processor.main (Processor.java : 233)

+4

Je ne suis pas certain comment vous voulez que nous résolvons cela avec si peu d'information ... –

+0

puis vérifier pdp [] longueur du tableau ^^ – pinichi

+0

je suppose que vous écrivez votre oublier que java a réseaux de base zéro. Dans tous les cas @Ignacio Vazquez-Abrams à droite) –

Répondre

0

OP besoin de clarifier. Cela pourrait aider:

if(pdp!=null && pdp.length>=l) 
    ps2.setString((stat+l),pdp[(l-1)]); 
+0

pourquoi down-voté? – Nishant

+0

Peut-être que l'explication de votre solution va inverser le downvote. Je ne voudrais pas m'inquiéter de la downvote maintenant puisque vous êtes 29k;) – leDominatre