奇怪的DB2数据库问题:Websphere Connection Pooling
我正在运行在Websphere容器中的基于Java的Web应用程序运行查询。 这个查询然而,作为相当简单,失败,怪异erorr如下:奇怪的DB2数据库问题:Websphere Connection Pooling
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R com.ibm.db2.jcc.b.zd: Invalid data conversion:Requested conversion would result in a loss of precision of 40000
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.q.a(q.java:137)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.q.a(q.java:1189)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.a(ad.java:1217)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.kb(ad.java:2977)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.d(ad.java:1970)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.d(ad.java:2342)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.U(ad.java:489)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.db2.jcc.b.ad.executeQuery(ad.java:472)
[5/15/09 16:50:33:828 IST] 0000001e SystemErr R at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery(WSJdbcPreparedStatement.java:559)
该查询是很简单:它很简单,只要
select field1, field2 from <xyz table> where <xyz_pk> = ?
主键是一个INTEGER(4- ),并且数据的值高达99999999.但是,当我运行此查询时,我的web应用程序在从websphere连接池获取的连接中运行 ,但它开始因pk值大于35k +而失败。在jdbc绑定代码中,我尝试了一个preparedStatement.setInt()和preparedStatement.setFloat()。但似乎没有任何工作!它只适用于低于35k +的任何事物,并且在所有情况下都会失败。
Java的int大小远远大于35k +,那么为什么这个查询会失败并出现此错误?这发生在我的应用程序中,当我使用我选择的数据库客户端尝试相同的查询时,正在为pkey的所有值获得正确的结果!
以前有没有人遇到过这个问题?如果是的话,你是如何解决它的?
我的坏..问题是绑定。我的查询有一个整数和小的int字段,我绑定小到int和int smallint,因此问题。
整数没有精度。在可变绑定的列链中必须有一个浮点数或实数。在这种情况下,无论你是从int,Int,long还是一个字节开始都没关系;整体与真实之间的转换会触发警告。查看从列到最后一个变量发生的所有绑定。你准备好的声明是否重新定义了你的任何字段类型?
我认为您可以做的最好的事情是打开WAS中的JDBC资源适配器的跟踪日志,然后查看实际发布到数据库的sql。
对不起,没有更多的帮助。
Karl
你可能会发布导致失败的代码吗?
我记得在websphere上有这样的事情,不得不改变数据库字段的精度。它必须处理数据库和java空间的转换,因为数据类型远远大于数据库上的数据类型。
我们改变了数据库的数据类型,改进了一些东西。
我记得前一阵子有这个问题。我想我通过直接在SQL语句中转换值来解决它。事情是这样的:
选择十进制(字段1)AS字段1,从场2 ...
您能否提供一些示例Java代码和完整的堆栈跟踪,以了解您使用PreparedStatement.setInt()的情况? java.sql中没有类位于堆栈跟踪中。 – NamshubWriter 2009-07-15 14:45:37