Comment utiliser une variable tablename pour un État préparé en java insert [dupliquer]

cette question a déjà une réponse ici:

j'utilise un objet java PreparedStatment pour construire une série de requêtes d'insertion. L'énoncé de la 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 table sont des variables (i.e. J'ai plusieurs tables avec le même format de colonne, chaque insert sera dirigé vers un autre). Je peux faire fonctionner les exécutes si je supprime le "?"tablename variable et Code dur, mais chaque déclaration préparée sera insérée dans une table différente, donc doit rester une variable que je peupler immédiatement avant d'exécuter la requête de lot en utilisant...

stmt.setString(1, "tableName1");

variable dynamique s'il vous plaît?

32
demandé sur Hardik Mishra 2012-07-03 17:36:51

5 réponses

vous ne pouvez pas. Vous devez construire le sql avec string concatenation / placeholder avec String.format. l'énoncé préparé est pour les valeurs de la colonne et non pour le nom de la table.

44
répondu fmucar 2016-05-02 15:00:37

vous pouvez utiliser placeholder à la place du nom de la table et le remplacer par votre tablename.

String strQuery = "INSERT INTO $tableName (col1, col2, col3, col4, col5)
                   VALUES (?,?,?,?,?,?);";

et remplacer quand u en vient à connaître le nom de la table

String query =strQuery.replace("$tableName",tableName);
stmt =conn.prepareStatement(query);
11
répondu trojan 2015-02-13 11:27:19

une alternative pourrait être String.format :

p.ex.

String sql = String.format("INSERT INTO %s (col1, col2, col3, (etc)",  myTablename);
-1
répondu davidfrancis 2012-07-03 15:43:43

le nom de la table ne peut pas être utilisé comme paramètre. Elle doit être codée en dur. Essayez quelque chose comme:

String tableName = "tableName1";
String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";
-2
répondu Andreas Johansson 2012-07-03 13:42:35

Vous devez l'ajouter à la chaîne d'origine:

String tableName = "some_table_name";
// some other code
String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";

avez-vous besoin du point-virgule dans le strQuery? (vous pouvez le faire, il a juste l'air un peu bizarre pour moi :-))

-3
répondu matt freake 2012-07-03 13:42:02