如何使用java编写语句的tablenamevariablesinsert

我正在使用java PreparedStatment对象来构build一系列批量的INSERT查询。 查询语句的格式是…

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

…所以字段值和表名都是variables(也就是说,我有多个相同列格式的表格,每个表格将被引导到不同的表格)。 我可以得到执行工作,如果我删除“? tablenamevariables和硬代码,但每个准备好的语句将被插入到一个不同的表,所以需要保持一个variables我立即填充之前执行批处理查询使用…

 stmt.setString(1, "tableName1"); 

我怎么能让这是一个dynamicvariables?

你不能。 您需要使用string连接/占位符与String.format构造sql。 准备好的语句是为列值而不是表名。

您可以使用占位符代替表名,然后用您的表名replace。

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

并取代你来了解表名

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

表名不能用作参数。 它必须是硬编码的。 尝试像这样:

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

一个替代可能是String.format

例如

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

您需要将其添加到原始string中:

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

你需要strQuery中的分号吗? (你可以这样做,这对我来说看起来有点奇怪:-))