我在尝试以动态方式使用PreparedStatement创建新表时遇到了一些困难。我试图添加未知数量的列及其各自的类型和大小。我一直收到SQL语法错误,但我怀疑这可能不是这种情况。
使用的变量:
应该是不言自明的。
con.setAutoCommit(false);
String sql = "? ?(?),";
PreparedStatement ps = con.prepareStatement(sql);
ps.addBatch("create table " + tablename + "( ");
for (int i = 0; i < colNames.length; i++){
if (!(i == colNames.length-1)) {
ps.setString(1, colNames[i]);
ps.setString(2, colTypes[i]);
ps.setString(3, colSizes[i]);
} else {
String format = "%s %s(%s)";
String lastLine = String.format(format, colNames[i], colTypes[i], colSizes[i]);
ps.addBatch(lastLine);
}
}
ps.addBatch(");");
ps.executeBatch();
注意:是的,这是作业。我不想要任何死的赠品,而是指示我以何种方式滥用某些功能,我怀疑。
祝你好运, Krys
答案 0 :(得分:2)
您需要将完整的SQL语句提供给addBatch。它不是构造动态SQL语句的工具。它是一种在运行多个语句时提高性能的工具。你在这里不需要它。
你也不需要这里的PreparedStatement,因为你不会有绑定变量(即列数据而不是列名),并且不会重复运行相同的SQL(但它不会受到伤害, )。 setString
和朋友不适用于列名或表名,仅适用于数据。
StringBuilder是构造带有可变部分的String的好工具。