【问题标题】:How to pass parameter in JDBC query for creating table?如何在 JDBC 查询中传递参数以创建表?
【发布时间】:2014-08-07 07:43:30
【问题描述】:

我正在尝试编写一个 sql 查询,我想在运行时传递表名。查询:

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);

在运行此代码时,我收到异常,即我的查询语法不正确。我们是否使用其他技术传递用于创建表的参数?

【问题讨论】:

标签: java mysql sql jdbc


【解决方案1】:

据我所知,prepared statements 不允许设置表名。大多数情况下它只支持?在 DML 语句中的值(插入、更新、删除、选择),而不是 DDL。

要创建表,必须创建一个SQL字符串,例如

String s = "create table " + TABLE_NAME + " (col int) ";
stmt.execute(s);

【讨论】:

  • 这是我最糟糕的噩梦成真了。你确定没有别的办法了吗?
  • 我记得几年前,我和你尝试过完全相同的事情,DB2、Oracle 和 SQLServer。
  • 我记得数据库可能支持这种方式(我记不太清了)。
  • 所以恐怕你需要先构建一个完整的字符串。准备好的语句的目的是重复使用已编译的 SQL 语句以提高性能,特别是对于类似的 SQL(例如,在一张表中插入 1000 条记录)。 DDL 不是它的目标,因为在 DB 方面,DDL 比 DML 需要更多的东西。
猜你喜欢
  • 2015-04-25
  • 2016-10-02
  • 2012-05-28
  • 2015-08-26
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多