使用 jdbc 语句创建和选择语句
Posted
技术标签:
【中文标题】使用 jdbc 语句创建和选择语句【英文标题】:Create and select statement using jdbc statement 【发布时间】:2017-05-28 06:57:57 【问题描述】:我需要创建一个临时表并在一个会话中针对 Netezza DB 选择临时表。
表格:abc、def
String query = create temp table MyTemp as select * from abc join def; select col1, col2 from MyTemp;";
boolean result = statement.execute(query);
while(true)
if(result)
ResultSet rs = statements.getResultSet();
while(rs.next())
//Access result set.
else
int count = statement.getUpdateCount(); -- CREATE statement output
if(count == -1)
break;
result = statement.getMoreResults();
我希望在执行 CREATE temp 语句和 SELECT 语句时从语句中获取更新计数和结果集。
第一条语句(CREATE 语句输出)的结果为真。但是后来当 statement.getMoreResults 被执行时,我得到了错误。但根据文档,statement.getMoreResults 为 ResultSet 输出返回 true。
我有另一种解决方案,即使用分号拆分字符串并使用相同的语句执行单个查询。但我想知道为什么上述解决方案不起作用。
【问题讨论】:
Netezza DB
是否支持这条 SQL 语句? create temp table as select * from abc; select * from abc
或者这是一个错字?
我可以使用 Aginity(Netezza SQL 编辑器)执行相同的查询。我在 select 语句的末尾添加了一个缺少的分号。我还可以验证查询确实是由 Netezza 在 Netezza Adminstrator 工具中执行的。
我没有与 Netezza 合作过。但是,您的查询怎么会有来自同一张表的两个 select 语句select * from abc; select * from abc;
您的查询不是 SQL 语句,而是脚本。我不知道 Netezza JDBC 驱动程序,但大多数 JDBC 驱动程序只允许一个语句而不是 脚本。你能在同一个事务中做 2 个单独的语句吗? in one session
是什么意思?
因为 JDBC 每条语句接受一个查询
【参考方案1】:
我不确定 Netezza JDBC 驱动程序是否支持它,或者它是否可以与您的示例查询和现有代码一起使用,但看起来您可能需要传递 allowMultiQueries=true
作为 JDBC URL 的选项.
更多信息请参见this answer。
【讨论】:
我尝试了该选项,但没有成功。正如您所指出的,这可能是因为 Netezza JDBC 驱动程序。现在我使用分号分割字符串并分别执行 SQL 语句。 @AnanthGopinath -- 好电话。我最近不得不做一些类似的事情,一些不请自来的提示:确保拆分时分号不在引号中。它还有助于在拆分之前删除 cmets,以确保您不会运行被注释掉的查询。以上是关于使用 jdbc 语句创建和选择语句的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 org.springframework.jdbc.object 实现可重用的 ddl 语句?
JDBC深入理解Statement和PreparedStatement