为啥 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 的可能性都有哪些?