Java 如何在JDBC查询中传递参数以创建表?
我正在尝试编写一个sql查询,希望在运行时传递表名。查询:Java 如何在JDBC查询中传递参数以创建表?,java,mysql,sql,jdbc,Java,Mysql,Sql,Jdbc,我正在尝试编写一个sql查询,希望在运行时传递表名。查询: create table mytable (time datetime, price double) 因此,我创建了一个通用查询: create table ? (time datetime, price double) 然后在运行时将表名传递为: PreparedStatement preparedStatement = connection.prepareStatement(CREATE_TABLE_QUERY); prepar
create table mytable (time datetime, price double)
因此,我创建了一个通用查询:
create table ? (time datetime, price double)
然后在运行时将表名传递为:
PreparedStatement preparedStatement = connection.prepareStatement(CREATE_TABLE_QUERY);
preparedStatement.setString(1, tableName);
preparedStatement.executeUpdate(CREATE_TABLE_QUERY);
在运行这段代码时,我得到一个异常,即我的查询语法不正确。我们是否使用其他技术传递用于创建表的参数?据我所知,prepared语句不允许设置表名。大多数情况下,它只支持?DML语句中的值(插入、更新、删除、选择),而不是DDL 若要创建表,必须创建SQL字符串,例如
String s = "create table " + TABLE_NAME + " (col int) ";
stmt.execute(s);
这是我最可怕的噩梦成真。你确定没有其他方法吗?我记得几年前,我尝试过与你完全相同的方法,DB2、Oracle和SQLServer。我记得可能DB支持这种方法(我记不清了)。因此,我担心你需要先构建一个完整的字符串。prepared语句的目的是重用已编译的SQL语句来提高性能,特别是对于类似的SQL语句(例如,在一个表中插入1000条记录)。DDL不是它的目标,因为在DB方面,DDL需要比DML更多的东西ツ: 缺少有关从参数获取表名的任何详细信息。