为啥 Bluemix dashDB 操作会引发 SQLCODE=-1667 的 SqlSyntaxErrorException?

Posted

技术标签:

【中文标题】为啥 Bluemix dashDB 操作会引发 SQLCODE=-1667 的 SqlSyntaxErrorException?【英文标题】:Why does Bluemix dashDB operation throws a SqlSyntaxErrorException with SQLCODE=-1667?为什么 Bluemix dashDB 操作会引发 SQLCODE=-1667 的 SqlSyntaxErrorException? 【发布时间】:2015-08-19 00:09:26 【问题描述】:

即使我没有尝试编辑表格/列,我也会收到此错误:

com.ibm.db2.jcc.am.SqlSyntaxErrorException:操作失败,因为指定表的类型不支持该操作。指定表:“DASH103985.wajihs”。表类型:“按列组织”。操作:“WITH RS”.. SQLCODE=-1667, SQLSTATE=42858

@MultipartConfig
public class DemoServlet extends HttpServlet 
  private static Logger logger = Logger.getLogger(DemoServlet.class.getName());
  private static final long serialVersionUID = 1L;
  @Resource(lookup="jdbc/db2")DataSource dataSource;

private String getDefaultText() 
  TweetsCombined = new String(" ");
  try 
    // Connect to the Database
    Connection con = null;
    try 
      System.out.println("Connecting to the database");
     catch (SQLException e) 
      TweetsCombined = "first" +e;
    

    // Try out some dynamic SQL Statements
    Statement stmt = null;

  try 
    stmt = con.createStatement();
    String tableName = "wajihs";// change table name here to one
                  // chosen in the first website
    String columnName = "msgBody";// msgBody is where the tweets
                                          // are stored
    String query = "SELECT * FROM \"" + tableName + "\"";
    ResultSet rs = stmt.executeQuery(query);

    while (rs.next()) 
      content = rs.getString(columnName) + ". ";
      if (content.toLowerCase().contains("RT".toLowerCase())
              || content.toLowerCase().contains("Repost: ".toLowerCase())) 
        // do nothing
      
      else 
        TweetsCombined.concat(content);
      

    
    // Close everything off
    // Close the Statement
    stmt.close();
    // close
    con.commit();
    // Close the connection
    con.close();
   catch (Exception e) 
    TweetsCombined = "second" +e;
    System.out.println(e.getMessage());
  
 catch (Exception e) 
  TweetsCombined = "third" + e;
  System.out.println(e);

return TweetsCombined;

【问题讨论】:

您是否查看过 SQLCODE 和 SQLSTATE 值的文档?你能告诉我们在那个源文件中哪里触发了异常吗?到目前为止,您尝试过什么? 【参考方案1】:

正如我在here 解释的那样,具有 BLU 加速功能的 dashDB 与没有 BLU 加速的 DB2 相比具有一定的局限性。在您的情况下,您只能对按列组织的表运行具有 CS 隔离级别的查询。

要么更改连接配置以使用 CS 隔离级别,要么在显式指定 ORGANIZE BY ROW 时创建表。

【讨论】:

感谢 mustaccio,您的解释拯救了我的一天!

以上是关于为啥 Bluemix dashDB 操作会引发 SQLCODE=-1667 的 SqlSyntaxErrorException?的主要内容,如果未能解决你的问题,请参考以下文章

将形状文件加载到 Bluemix dashDB 时出错

使用 Bluemix 备份 DashDB 的可能性都有哪些?

如何将两个参数传递给来自 IBM Bluemix 的 Node-Red 的 dashDB 查询元素

dashDB 控制台中 R-studio 的密码是啥?

IBM Cloud dashDB 时区

使用 DashDB 作为数据库(而不是数据仓库)