使用prepareStatement jdbc java创建任意表名

使用prepareStatement jdbc java创建任意表名,java,mysql,sql,jdbc,prepared-statement,Java,Mysql,Sql,Jdbc,Prepared Statement,因此,我试图创建一个未指定列的未指定表名,但是,我是prepareStatement新手,不知道该怎么做。 我就是这么想的 我知道我需要一个循环,用于“line”的多个条目,这是表名 但是我如何处理这些专栏呢?我想我在这里指定了列数(4)。我如何在没有指定的情况下执行此操作?如果setString的值因表名不同而不同,那么我应该为其设置什么呢? 我有点困惑,我希望有人能给我解释一下 loop start .... line = kb.next(); sql = "Create TABLE " +

因此,我试图创建一个未指定列的未指定表名,但是,我是prepareStatement新手,不知道该怎么做。 我就是这么想的 我知道我需要一个循环,用于“line”的多个条目,这是表名 但是我如何处理这些专栏呢?我想我在这里指定了列数(4)。我如何在没有指定的情况下执行此操作?如果setString的值因表名不同而不同,那么我应该为其设置什么呢? 我有点困惑,我希望有人能给我解释一下

loop start ....
line = kb.next();
sql = "Create TABLE " + line  + "(?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,?);
pstmt.executeUpdate();
loop end

您不太可能在任何数据库上使用它


有关Oracle特定的推理,请参见

,您不太可能在任何数据库上使用该推理


有关特定于Oracle的推理,请参见

Prepared语句占位符只能在SQL允许表达式的地方使用。
CREATE TABLE
语句中的列名不是表达式。这需要使用字符串连接。另外,mysql不喜欢
创建表1(id int)
但将接受用back tick包装的tablename,而不使用预先准备好的语句。这是错误的方法。准备好的语句占位符只能在SQL允许表达式的地方使用。
CREATE TABLE
语句中的列名不是表达式。这需要使用字符串连接。另外,mysql不喜欢
创建表1(id int)
但将接受用back tick包装的tablename,而不使用预先准备好的语句。这是错误的方法。你的意思是“,?”本身不能使用create吗?或者你说的是准备陈述?没错。“?”是绑定变量,它们不起作用。您完全可以在PreparedStatement中发出CREATE TABLE语句。感谢您的解释,现在它很有意义您的意思是“,?”本身无法使用CREATE?或者你说的是准备陈述?没错。“?”是绑定变量,它们不起作用。您完全可以在PreparedStatement中发出CREATETABLE语句。感谢您的解释,现在它非常有意义