Como usar uma variável tablename para uma instrução preparada em java insert

Eu estou usando um object java PreparedStatment para construir uma série de consultas INSERT em lote. A declaração de consulta é do formato …

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

… então ambos os valores de campo e o nome da tabela são variables ​​(ou seja, eu tenho várias tabelas com o mesmo formato de coluna do qual cada inserção será direcionada para uma diferente). Posso fazer as execuções funcionarem se eu remover o “?” variável tablename e código rígido, mas cada instrução preparada será inserida em uma tabela diferente, portanto, precisa permanecer uma variável que preenche imediatamente antes de executar a consulta em lote usando …

 stmt.setString(1, "tableName1"); 

Como posso deixar isso ser uma variável dinâmica, por favor?

   

Você não pode. Você precisa contruir o sql com concatenação de string / espaço reservado com String.format. A instrução preparada é para os valores da coluna não para o nome da tabela.

Você pode usar o marcador no lugar do nome da tabela e, em seguida, substituí-lo pelo nome da sua tabela.

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

e substitua quando você vier a conhecer o nome da tabela

 String query =strQuery.replace("$tableName",tableName); stmt =conn.prepareStatement(query); 

Uma alternativa poderia ser String.format :

por exemplo

 String sql = String.format("INSERT INTO $1%s (col1, col2, col3, (etc)", myTablename); 

O nome da tabela não pode ser usado como um parâmetro. Deve ser codificado. Tente algo como:

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

Você precisaria adicioná-lo à string original:

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

Você precisa do ponto-e-vírgula no strQuery? (você pode fazer isso, parece um pouco estranho para mim :-))