首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

一个很诡异的有关问题,queryForInt若动态传参就报错,直接拼到sql中就没有关问题

2013-11-20 
一个很诡异的问题,queryForInt若动态传参就报错,直接拼到sql中就没问题这样写没问题:JdbcTemplate jt ne

一个很诡异的问题,queryForInt若动态传参就报错,直接拼到sql中就没问题
这样写没问题:
                JdbcTemplate jt = new JdbcTemplate(dataSource);
String sql = "select count(1) from t_sale_type where sale_type='"+saleType+"'";
return jt.queryForInt(sql);

这样写有问题:
JdbcTemplate jt = new JdbcTemplate(dataSource);
String sql = "select count(1) from t_sale_type where sale_type=?";
return jt.queryForInt(sql, new Object[]{saleType});


报错信息:


java.lang.NullPointerException
at weblogic.utils.wrapper.WrapperFactory.getCachedWrapperClass(WrapperFactory.java:52)
at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:242)
at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:230)
at weblogic.utils.wrapper.WrapperFactory.createWrapper(WrapperFactory.java:219)
at weblogic.jdbc.wrapper.JDBCWrapperFactory.getWrapper(JDBCWrapperFactory.java:184)
at weblogic.jdbc.rmi.internal.PreparedStatementStub.readResolve(PreparedStatementStub.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadResolve(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:195)
at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:565)
at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:191)
at weblogic.rmi.internal.ObjectIO.readObject(ObjectIO.java:62)
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:217)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:224)
at weblogic.jdbc.rmi.internal.ConnectionImpl_weblogic_jdbc_wrapper_PoolConnection_oracle_jdbc_driver_T4CConnection_1030_WLStub.prepareStatement(Unknown Source)
at weblogic.jdbc.rmi.SerialConnection.prepareStatement(SerialConnection.java:212)
at org.springframework.jdbc.core.JdbcTemplate$SimplePreparedStatementCreator.createPreparedStatement(JdbcTemplate.java:1203)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:532)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:588)
[解决办法]
谢谢分享。我把原文考过来了,以备遇到同样问题搜索到这个帖子的朋友参考:
------------------------------------------分割线------------------------------------------------
今天发现:spring jdbctemplate只要绑定参数情况下执行sql语句就报错

weblogic.jdbc.rmi.internal.ConnectionImpl_weblogic_jdbc_wrapper_PoolConnection

_oracle_jdbc_driver_T4CConnection_1030_WLStub.

prepareStatement(Unknown Source)

这样写没问题:
    JdbcTemplate jt = new JdbcTemplate(dataSource);
String sql = “select count(1) from t_sale_type where sale_type=’”+saleType+”‘”;
return jt.queryForInt(sql);

这样写有问题:
JdbcTemplate jt = new JdbcTemplate(dataSource);
String sql = “select count(1) from t_sale_type where sale_type=?”;
return jt.queryForInt(sql, new Object[]{saleType});
报错信息:
java.lang.NullPointerException
at weblogic.utils.wrapper.WrapperFactory.getCachedWrapperClass(WrapperFactory.java:52)
at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:242)
at weblogic.utils.wrapper.WrapperFactory.getWrapperClass(WrapperFactory.java:230)
at weblogic.utils.wrapper.WrapperFactory.createWrapper(WrapperFactory.java:219)
at weblogic.jdbc.wrapper.JDBCWrapperFactory.getWrapper(JDBCWrapperFactory.java:184)
at weblogic.jdbc.rmi.internal.PreparedStatementStub.readResolve(PreparedStatementStub.java:46)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadResolve(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:195)
at weblogic.rjvm.MsgAbbrevInputStream.readObject(MsgAbbrevInputStream.java:565)
at weblogic.utils.io.ChunkedObjectInputStream.readObject(ChunkedObjectInputStream.java:191)
at weblogic.rmi.internal.ObjectIO.readObject(ObjectIO.java:62)


at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:217)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:224)
at weblogic.jdbc.rmi.internal.ConnectionImpl_weblogic_jdbc_wrapper_PoolConnection_oracle_jdbc_driver_

T4CConnection_1030_WLStub.prepareStatement(Unknown Source)
at weblogic.jdbc.rmi.SerialConnection.prepareStatement(SerialConnection.java:212)
at org.springframework.jdbc.core.JdbcTemplate$SimplePreparedStatementCreator.createPreparedStatement(JdbcTemplate.java:1203)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:532)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:588)

问题解决方案:经测试发现,这是weblogic版本与当前环境所引jar包版本不匹配造成的

具体是哪些jar包,目前尚不明确,只知道,将weblogic换成10.0就没有当前这个问题

而若weblogic版本为10.3那么就会有上面所说的这个问题
------------------------------------------分割线------------------------------------------------

热点排行