我一直在搞乱从我的JAVA应用程序运行的Oracle数据库查询。我可以成功地将它们全部运行在SQL Developer中。但是当我尝试从我的JAVA应用程序执行它们时,我通常会在某些查询中获得UpdatadbleResultSet Error/Exception
。
另外,有时我收到ExhaustedResultset
。正如我在底部提到的,我将重新解决这个问题(当我有机会时)。我一直在编辑,很快就会成为一本书。
这是为什么?我似乎无法确定问题所在。
某些查询成功运行,例如:
SELECT table_name
FROM all_tables
SELECT column_name, data_length
FROM all_tab_columns
WHERE table_name = 'mytable'
但是当我尝试运行类似
的东西时SELECT length(<myColumnName>)
FROM mytable
我得到了updateableResultSetError
我正在运行查询作为按钮点击调用的方法(例如下面的例子)。
static void testQuery() {
String query = "SELECT blah from blah"
String length;
ResultSet rs = db.runQuery(query);
Length = rs.getString("length(myCol)")
System.out.println(length);
}
我也试过while rs.next()
我只能认为由于某种原因我无法进入每张桌子而只能拉出“更大”的图片。
编辑:说明数据库连接
我使用已添加到项目中的其他jar文件进行连接。
private static IDriver driver = null;
private static Database db = null;
然后我以单独的方法传递所有连接凭据。
private void connectDB(){
driver = new OracleDriver();
db = new Database(driver)
driver.getPassword;
driver.getetc;
driver.getEtc;
}
编辑:
当我收到所有我正在返回的东西时,是。
Ljava.lang.StatckTraceElement;(assortment of random characters).
我可能没有正确的堆栈痕迹,所以有人可以填补我。毕竟我提供了赏金。
此外,我会编辑这个问题,并在有空的时候再次将其分解。
答案 0 :(得分:1)
尝试通过columnIndex而不是列名检索select语句中的值,看看是否有所不同。
目前,由于该代码未发布,很难说出db.runQuery()
的内容。
String query = "SELECT length(myCol) FROM myTable";
String length;
ResultSet rs = db.runQuery(query);
while (rs.next()) {
length = rs.getString(1);
System.out.println(length);
}
答案 1 :(得分:1)
我已经了解了这里可能发生的事情(这可以解释为什么有些查询有效,有些查询无效)。当使用结果集的getString()方法时,根据jdbc ResultSet javadocs,列标签。
使用SQL AS子句指定的列的标签。 如果未指定SQL AS子句,则标签是列的名称
由于“length(myCol)”既不是标签也不是列名,因此可能因为它而失败(但没有堆栈跟踪,很难说出你的问题实际上是什么)。
尝试
String query = "SELECT length(myCol) AS myCol_len FROM myTable"
ResultSet rs = db.runQuery(query);
String length = rs.getString("myCol_len");
虽然你确定,但你不想要:
int length = rs.getInt("myCol_len");
或者(由Kal编写),您可以使用列索引从结果集中获取数据,从而无需SQL AS标签:
String query = "SELECT length(myCol) FROM myTable"
ResultSet rs = db.runQuery(query);
String length = rs.getString(1);
答案 2 :(得分:1)
您的问题是您正在尝试更新无法更新的查询,因此可更新的结果错误。似乎创建数据库连接或执行查询的任何人都在创建可更新的结果集。
您不能在可更新的结果集中使用某些类型的select:您不能使用聚合函数(例如length,min,max),您不能使用select * etc.)