这两句sql放在程序中,为什么一句可以,另一句不行?
这两句sql放在程序中,为什么一句可以,另一句不行?
第一句不可以,第二句可以.但这两句如果直接放在db2的客户端工具中,都是可以执行的,放在程序中,却一个可以一个不可以
String sql="select * from syscat.tables";
String sql="select * from T_SEARCH_ARTIST_TBL";
第一句执行时,会出error,error如下
com.ibm.db2.jcc.a.SqlException: DB2 SQL Error: SQLCODE=-243, SQLSTATE=36001, SQLERRMC=SQL_CURSH200C1, DRIVER=4.0.100
at com.ibm.db2.jcc.a.yc.a(yc.java:55)
at com.ibm.db2.jcc.a.yc.a(yc.java:126)
at com.ibm.db2.jcc.a.wk.c(wk.java:1909)
at com.ibm.db2.jcc.a.wk.d(wk.java:1897)
at com.ibm.db2.jcc.a.wk.a(wk.java:1424)
at com.ibm.db2.jcc.t4.db.g(db.java:138)
at com.ibm.db2.jcc.t4.db.a(db.java:38)
程序如下
try {
Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();
} catch (Exception e1) {
e1.printStackTrace();
return;
}
String url = txt_conn.getText();
String user = txt_user.getText();
String password = txt_pwd.getText();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DriverManager.getConnection(url, user, password);
stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
//String sql="select * from syscat.tables";
String sql="select * from T_SEARCH_ARTIST_TBL";
rs = stmt.executeQuery(sql);
List list = new ArrayList();
while (rs.next()) {
list.add(rs.getString("ARTIST_NAME"));
}
} catch (SQLException e1) {
e1.printStackTrace();
return;
} finally {
try {
rs.close();
stmt.close();
conn.close();
} catch (SQLException e1) {
e1.printStackTrace();
return;
}
}
[解决办法]
首先请确定jcc连接的用户名是否具有syscat的权限
[解决办法]
>>首先请确定jcc连接的用户名是否具有syscat的权限
这个怎么看?我在客户端工具中,用db2admin连接进去,是可以执行的.
[解决办法]
你的数据库连接文件也是用DB2admin这个用户吗?
[解决办法]
是的,没错,也是db2admin这个用户
[解决办法]
可以查看一下数据库帮助,再想办法解决。
SQLSTATE 36001: 不能为指定的 SELECT 语句定义 SENSITIVE 游标。
[解决办法]
有权限的话 按照出错信息看 会不会是那条语句不支持类似rs.next()方法?
[解决办法]
这个需要你在jdbc的cursor 设置成只读的。
[解决办法]
http://www.chinaitpower.com/A200508/2005-08-10/188671.html
[解决办法]
问题解决了?