如何为java预处理语句插入使用tablename变量

如何为java预处理语句插入使用tablename变量

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

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

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

stmt.setString(1, "tableName1");

我怎么能让这个变成动态变量呢?


慕虎7371278
浏览 676回答 3
3回答

倚天杖

你不能。您需要使用字符串连接/占位符和String.format构造sql。prepared语句用于列值而不是表名。

慕哥9229398

您可以使用占位符代替表名,然后将其替换为您的表名。String strQuery = "INSERT INTO $tableName (col1, col2, col3, col4, col5)              VALUES (?,?,?,?,?,?);";当你知道tablename时替换String query =strQuery.replace("$tableName",tableName);stmt =conn.prepareStatement(query);

慕桂英3389331

一种替代方案可能是String.format:例如String sql = String.format("INSERT INTO $1%s (col1, col2, col3, (etc)",  myTablename);
打开App,查看更多内容
随时随地看视频慕课网APP