Spécification dynamique des noms de table dans les requêtes Java PreparedStatement INSERT
La création de requêtes INSERT par lots à l'aide de PreparedStatement
Java nécessite souvent de gérer à la fois les valeurs de champs variables et les noms de tables variables. Cela vous permet d'insérer des données dans plusieurs tables avec des structures de colonnes identiques sans réécrire la requête pour chaque table.
Une approche courante, mais imparfaite, tente de paramétrer le nom de la table directement dans l'instruction SQL :
<code class="language-java">String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);"; </code>
Cela ne fonctionne pas car le paramétrage PreparedStatement
est destiné aux valeurs des colonnes, et non aux noms de tables ou de schémas. Vous ne pouvez pas définir le nom de la table en utilisant stmt.setString(1, "tableName1");
La solution efficace : la concaténation de chaînes
La méthode correcte consiste à construire dynamiquement la chaîne de requête SQL en concaténant le nom de la table avant de créer le PreparedStatement
. Cela garantit que le nom de la table est correctement incorporé dans la requête :
<code class="language-java">String tableName = "tableName1"; String query = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);"; PreparedStatement stmt = connection.prepareStatement(query);</code>
Cette technique offre la flexibilité nécessaire pour gérer efficacement les opérations INSERT par lots ciblant plusieurs tables avec des définitions de colonnes partagées. N'oubliez pas de nettoyer tableName
pour éviter les vulnérabilités d'injection SQL si elles proviennent d'une source non fiable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!