J'utilise un Java PreparedStatment objet pour construire une série de requêtes INSERT par lots. L'instruction de requête est du format ...
String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
... donc les deux valeurs de champ et le nom de la table sont des variables (c'est-à-dire que j'ai plusieurs tables avec le même format de colonne dont chaque insert sera dirigé vers une autre). Je peux faire fonctionner les exécutions si je supprime le "?" variable de nom de table et code en dur, mais chaque instruction préparée sera insérée dans une table différente et doit donc rester une variable que je remplis immédiatement avant d'exécuter la requête par lots à l'aide de ...
stmt.setString(1, "tableName1");
Comment puis-je laisser cela être une variable dynamique s'il vous plaît?
Tu ne peux pas. Vous devez construire le sql avec la concaténation de chaîne/espace réservé avec String.format. l'instruction préparée concerne les valeurs de colonne et non le nom de la table.
Vous pouvez utiliser un espace réservé à la place du nom de la table, puis le remplacer par votre nom de table.
String strQuery = "INSERT INTO $tableName (col1, col2, col3, col4, col5)
VALUES (?,?,?,?,?,?);";
et remplacez quand vous connaissez le nom de la table
String query =strQuery.replace("$tableName",tableName);
stmt =conn.prepareStatement(query);