我们正在尝试从oracle 10g数据库填充域对象。有问题的字段被定义为域对象中的字符串,具有以下约束。
ZDATA(空白:假,MAXSIZE:3000000)
数据大小约为XML的70K。
表定义如下所示:
ZDATA NOT NULL LONG()
我们正在使用grails生成的getter访问该表:
reportData = ReportData.get(reportDataId)
进行此调用时,我们得到一个空指针异常。这是我们的堆栈跟踪的一部分。 显示java.lang.NullPointerException 在java.lang.String。(String.java:176) at oracle.sql.CharacterSet.AL32UTF8ToString(CharacterSet.java:1518) at oracle.jdbc.driver.DBConversion.CharBytesToString(DBConversion.java:610) at oracle.jdbc.driver.DBConversion.CharBytesToString(DBConversion.java:555) at oracle.jdbc.driver.LongAccessor.getString(LongAccessor.java:217) at oracle.jdbc.driver.T4CLongAccessor.getString(T4CLongAccessor.java:426) at oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:403) at oracle.jdbc.driver.OracleResultSet.getString(OracleResultSet.java:1515) 在org.apache.commons.dbcp.DelegatingResultSet.getString(DelegatingResultSet.java:224) at org.hibernate.type.StringType.get(StringType.java:18) 在org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163) 在org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154) 在org.hibernate.loader.hql.QueryLoader.getResultColumnOrRow(QueryLoader.java:333) 在org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:606) 在org.hibernate.loader.Loader.doQuery(Loader.java:701) 在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236) 在org.hibernate.loader.Loader.doList(Loader.java:2220) 在org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104) 在org.hibernate.loader.Loader.list(Loader.java:2099) 在org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378) 在org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338) 在org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172) 在org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121) 在org.hibernate.impl.QueryImpl.list(QueryImpl.java:79) at org.codehaus.groovy.grails.orm.hibernate.metaclass.ExecuteQueryPersistentMethod $ 1.doInHibernate(ExecuteQueryPersistentMethod.java:94)
我们使用的是oracle驱动程序10.2.0.3.0。
答案 0 :(得分:1)
这是版本10.2.0.1.0的发行说明中列出的oracle jdbc驱动程序的已知限制。
根据Oracle JDBC驱动程序版本11.1.0.7.0
的发行说明修复了此已知限制答案 1 :(得分:0)
为什么在Oracle中使用长字段?很久已经过时,你应该使用clob。
答案 2 :(得分:0)
如果要在Oracle中存储XML,请使用XmlType列,该列可以轻松转换为CLOB并与JDBC 10g驱动程序配合使用,因为这正是我们目前在生产环境中使用的。