如何将表名变量用于 java 预准备语句插入

我正在使用java ReadyStatment对象来构造一系列批处理的INSERT查询。查询语句的格式为...

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

...所以字段值和表名都是变量(即。我有多个具有相同列格式的表,其中每个插入将被定向到不同的表)。如果我删除“?”表名变量和硬代码,我可以让执行工作,但每个准备好的语句将入到不同的表中,因此需要保持一个变量,我在执行批处理查询之前立即使用...

stmt.setString(1, "tableName1");

我怎么能让它成为一个动态变量呢?


答案 1

你不能。您需要使用 String.format 使用字符串串联/占位符构造 sql。预准备语句用于列值,而不是表名。


答案 2

您可以使用占位符代替表名,然后将其替换为表名。

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

并在您知道表名时进行替换

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