Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OracleResultSetMetaData在其中引发NullPointerException<;初始化>;方法_Oracle_Jdbc_Groovy_Nullpointerexception_Resultset - Fatal编程技术网

OracleResultSetMetaData在其中引发NullPointerException<;初始化>;方法

OracleResultSetMetaData在其中引发NullPointerException<;初始化>;方法,oracle,jdbc,groovy,nullpointerexception,resultset,Oracle,Jdbc,Groovy,Nullpointerexception,Resultset,我使用groovy.sql.sql对Oracle执行查询并返回一个结果集,然后在自定义TableAdapter中使用该结果集来支持JTable。查询执行时没有错误,但当我尝试从ResultSet检索元数据时,在第72行的OracleResultSetMetaData方法期间会引发NullPointerException。我一直无法找到该类的源代码来找出可能为null的内容,因此我向这个很棒的社区寻求帮助 下面的函数是我用来执行SQL查询的函数,该查询是在一个单独的类中生成的,该类解析模板。我目前

我使用groovy.sql.sql对Oracle执行查询并返回一个结果集,然后在自定义TableAdapter中使用该结果集来支持JTable。查询执行时没有错误,但当我尝试从ResultSet检索元数据时,在第72行的OracleResultSetMetaData方法期间会引发NullPointerException。我一直无法找到该类的源代码来找出可能为null的内容,因此我向这个很棒的社区寻求帮助

下面的函数是我用来执行SQL查询的函数,该查询是在一个单独的类中生成的,该类解析模板。我目前正在模拟该模板以返回一条经过验证的有效SQL语句

ResultSet getResultSet() {
    if (data == null) {
        if (sql == null) {
            sql = Sql.newInstance(CONN_STRING, USERNAME, PASSWORD, DRIVER_NAME)
            sql.resultSetType = ResultSet.TYPE_SCROLL_SENSITIVE
            sql.resultSetHoldability = ResultSet.HOLD_CURSORS_OVER_COMMIT // Added since initial post
        }

        data = sql.executeQuery(template.getSql())          
    }

    return data
}
我的getColumnCount方法是NPE发生的地方,看起来是这样的

@Override
public synchronized int getColumnCount() {
    return getResultSet().metaData.columnCount
}
这是我的堆栈跟踪

2012-10-20 21:49:12,135 [AWT-EventQueue-0] ERROR org.codehaus.griffon.runtime.builder.UberBuilder - An error occurred while building browser.BrowserView@17c1e333
 [exec] java.lang.NullPointerException
 [exec]     at oracle.jdbc.driver.OracleResultSetMetaData.<init>(OracleResultSetMetaData.java:72)
 [exec]     at oracle.jdbc.driver.ScrollableResultSet.getMetaData(ScrollableResultSet.java:2004)
 [exec]     at com.trxi.browser.TemplateTableModel.getColumnCount(TemplateTableModel.groovy:75)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:97)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:141)
 [exec]     at browser.BrowserView$_run_closure1_closure2.doCall(BrowserView.groovy:11)
 [exec]     at browser.BrowserView$_run_closure1_closure2.doCall(BrowserView.groovy)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:97)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:141)
 [exec]     at browser.BrowserView$_run_closure1.doCall(BrowserView.groovy:10)
 [exec]     at browser.BrowserView$_run_closure1.doCall(BrowserView.groovy)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:97)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.this$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(Unknown Source)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:168)
 [exec]     at browser.BrowserView.run(BrowserView.groovy:4)
 [exec]     at org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:152)
 [exec]     at org.codehaus.griffon.runtime.builder.UberBuilder.build(UberBuilder.groovy:160)
 [exec]     at org.codehaus.griffon.runtime.core.AbstractMVCGroup$1.run(AbstractMVCGroup.java:129)
2012-10-20 21:49:12135[AWT-EventQueue-0]错误org.codehaus.griffon.runtime.builder.UberBuilder-生成浏览器时出错。BrowserView@17c1e333
[exec]java.lang.NullPointerException
[exec]位于oracle.jdbc.driver.OracleResultSetMetaData。(OracleResultSetMetaData.java:72)
[exec]位于oracle.jdbc.driver.ScrollableResultSet.getMetaData(ScrollableResultSet.java:2004)
[exec]位于com.trxi.browser.TemplateTableModel.getColumnCount(TemplateTableModel.groovy:75)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:97)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass。此$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(未知源)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:141)
[exec]位于browser.BrowserView$\u run\u closure1\u closure2.doCall(BrowserView.groovy:11)
[exec]位于browser.BrowserView$\u run\u closure1\u closure2.doCall(BrowserView.groovy)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:97)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass。此$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(未知源)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:141)
[exec]位于browser.BrowserView$\u run\u closure1.doCall(BrowserView.groovy:10)
[exec]位于browser.BrowserView$\u run\u closure1.doCall(BrowserView.groovy)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeFactoryMethod(UberInterceptorMetaClass.groovy:97)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass。此$3$invokeFactoryMethod(UberInterceptorMetaClass.groovy)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass$this$3$invokeFactoryMethod.callCurrent(未知源)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:168)
[exec]位于browser.BrowserView.run(BrowserView.groovy:4)
[exec]位于org.codehaus.griffon.runtime.builder.UberInterceptorMetaClass.invokeMethod(UberInterceptorMetaClass.groovy:152)
[exec]位于org.codehaus.griffon.runtime.builder.UberBuilder.build(UberBuilder.groovy:160)
[exec]位于org.codehaus.griffon.runtime.core.AbstractMVCGroup$1.run(AbstractMVCGroup.java:129)

更新:我修改了代码以从模板而不是ResultSetMetaData对象中提取信息,现在我得到一个错误,我的ResultSet已关闭。我认为可以相对安全地假设这是导致OracleResultSetMetaData对象在其方法期间失败的原因。有人知道我做错了什么吗?

经过一些研究,我发现ResultSet被关闭的原因是在groovy.sql.sql.executeQuery()函数的保护下创建的语句对象被关闭了。为了防止它被关闭,我只需要在groovy.sql.sql对象上启用语句缓存

sql.cacheStatements = true