2010-09-14 10 views
0

Est-ce la syntaxe correcte pour une déclaration préparée en java:Java PreparedStatement Syntaxe

INSERT INTO table (id, version, data) 
    VALUES (?, ?, ?) 
    ON DUPLICATE KEY UPDATE 
    data = IF(version > values(version), data, values(data)), 
    version = IF(version > values(version), version, values(version)) 

Je cherche la meilleure façon d'insérer ou de mettre à jour des millions de lignes à partir d'une boucle for en prenant java avantage de AddBatch de PreparedStatement.

+1

Il n'y a pas de 'syntaxe pour une instruction préparée en Java' . Il existe une syntaxe pour une instruction préparée dans SQL. Pour Java, c'est juste une chaîne. – EJP

+0

je parle des points d'interrogation et des 'valeurs (version)' ... de toute évidence c'est la syntaxe sql mais les instructions préparées font une certaine forme d'analyse juste? –

Répondre

2

Si l'instruction SQL est correcte, vous devez l'envelopper comme suit:

String sql = ... 
PreparedStatement prep; 
prep = conn.prepareStatement(sql); 
prep.setInt(1, x); 
prep.setString(2, y); 
prep.setString(3, z); 
prep.execute(); 

Pour utiliser addBatch, utilisez:

String sql = ... 
PreparedStatement prep; 
prep = conn.prepareStatement(sql); 
for (...) { 
    prep.setInt(1, x); 
    prep.setString(2, y); 
    prep.setString(3, z); 
    prep.addBatch(); 
} 
prep.execute(); 
+0

Thomas, j'ai obtenu cette partie mais ma question est, si la syntaxe sql est correcte .. vous savez comment les instructions préparées analysent les points d'interrogation .. je voulais juste savoir si 'values ​​(data)' est la bonne façon de dire 'use quelle que soit la valeur qui a été transmise à la colonne de données –

+0

Je vais aller de l'avant et vous donner le crédit pour la réponse, même si elle ne répond pas à ma question exacte. Je suppose que la faute est sur moi pour ne pas être très clair dans ma question originale. –