使用 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

通过带有参数的 JDBC 从 SAP HANA 数据库中选择

使用过程创建表作为选择语句

如何创建选择语句输出的校验和

在 oracle 模式下升级 h2 数据库 jar 后选择语句失败