【问题标题】:Java JDBC with PostgreSQL: PreparedStatement Execute with Add Column Query returns falseJava JDBC with PostgreSQL:PreparedStatement Execute with Add Column Query 返回 false
【发布时间】:2012-05-02 18:09:59
【问题描述】:

我正在尝试向数据库表中添加一列,并且

PreparedStatement  ps = con.prepareStatement(query);  
ps.execute();
ps.close();

查询类似于(有效的 SQL)

ALTER TABLE mytable ADD COLUMN mycolumn datatypeinfo

无论如何,它执行得很好并且列被创建了。但是执行语句返回 false。我尝试使用 executeUpdate 并返回 0 行。

请注意,这整个事情都在 con.setAutoCommit 设置为 false 的事务中。所以我不确定这是否是问题所在。问题是我必须先创建列,然后才能继续进行其他更新查询。所以它必须在事务中运行。

【问题讨论】:

  • 当您不期望 ResultSet 时,为什么不使用 executeUpdate() 方法? docs.oracle.com/javase/6/docs/api/java/sql/…
  • 我试过了,但它没有返回任何东西。正如它所说,它为不返回任何内容的 SQL 语句返回 0,例如 DDL 语句。我想我将只依赖是否抛出异常。

标签: java sql postgresql jdbc ddl


【解决方案1】:

execute()的返回值并不表示是否成功,而是表示运行的查询是否返回了结果。

由于ALTER TABLE 不返回结果,execute() 正确返回false

引用自Javadocs

返回:true 如果第一个结果是 ResultSet 对象; false如果第一个结果是更新计数或者没有结果

【讨论】:

  • 很公平,但是如何检查列是否已添加?我是否需要使用 DatabaseMetaData 返回表并检查它是否生效? (本质上,我可以一步完成而不是两步吗?)
  • 如果失败则抛出异常。
猜你喜欢
  • 1970-01-01
  • 2018-11-02
  • 2021-01-28
  • 2021-03-05
  • 2023-03-20
  • 2020-07-01
  • 2022-12-31
  • 2011-08-12
  • 2021-01-20
相关资源
最近更新 更多