百度找不到答案,只好求助这里,spring操作sql server

zxw0558 2015-10-20 07:01:40
在使用spring操作数据库sql server2008时,插入动作(批量)时,报以下异常,看哪位对spring有深入研究的大神能帮解决。
驱动使用jtds.jar是没问题,但效率不高。换成sqljdbc4.jar就是以下报错。
难道是参数setnull问题?

2015-10-20 16:19:34,557 DEBUG [org.springframework.beans.factory.support.DefaultListableBeanFactory] - <Returning cached instance of singleton bean 'sqlAspect'>
2015-10-20 16:19:34,575 INFO [org.dbist.aspect.SqlAspect] - <
SQL:
insert
into
mes.dbo.testtable
(column1,column2,column3)
values
(:column1, :column2, :column3)
Parameters:
{column1=ABC, column2=A1B1C1, column3=null},
{column1=ABC, column2=A1B1C2, column3=null},
{column1=ABC, column2=A1B1C3, column3=null}
ElapsedTime: 17
>
2015-10-20 16:19:34,579 DEBUG [org.springframework.jdbc.core.JdbcTemplate] - <Executing SQL batch update [insert into mes.dbo.testtable(column1,column2,column3) values(?, ?, ?)]>
2015-10-20 16:19:34,579 DEBUG [org.springframework.jdbc.core.JdbcTemplate] - <Executing prepared SQL statement [insert into mes.dbo.testtable(column1,column2,column3) values(?, ?, ?)]>
2015-10-20 16:19:34,580 DEBUG [org.springframework.jdbc.support.JdbcUtils] - <JDBC driver supports batch updates>
2015-10-20 16:19:34,588 DEBUG [org.springframework.jdbc.core.StatementCreatorUtils] - <JDBC 3.0 getParameterType call not supported>
com.microsoft.sqlserver.jdbc.SQLServerException: com.microsoft.sqlserver.jdbc.SQLServerException: 关键字 'WHERE' 附近有语法错误。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at com.microsoft.sqlserver.jdbc.SQLServerParameterMetaData.<init>(SQLServerParameterMetaData.java:396)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.getParameterMetaData(SQLServerPreparedStatement.java:1482)
at org.apache.commons.dbcp.DelegatingPreparedStatement.getParameterMetaData(DelegatingPreparedStatement.java:221)
at org.apache.commons.dbcp.DelegatingPreparedStatement.getParameterMetaData(DelegatingPreparedStatement.java:221)
at org.springframework.jdbc.core.StatementCreatorUtils.setNull(StatementCreatorUtils.java:231)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:213)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:144)
at org.springframework.jdbc.core.BatchUpdateUtils.setStatementParameters(BatchUpdateUtils.java:65)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.access$000(NamedParameterBatchUpdateUtils.java:32)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils$1.setValues(NamedParameterBatchUpdateUtils.java:48)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:998)
at org.springframework.jdbc.core.JdbcTemplate$4.doInPreparedStatement(JdbcTemplate.java:988)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:643)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:672)
at org.springframework.jdbc.core.JdbcTemplate.batchUpdate(JdbcTemplate.java:988)
at org.springframework.jdbc.core.namedparam.NamedParameterBatchUpdateUtils.executeBatchUpdateWithNamedParameters(NamedParameterBatchUpdateUtils.java:40)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:359)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.batchUpdate(NamedParameterJdbcTemplate.java:353)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:82)
at org.dbist.aspect.SqlAspect.print(SqlAspect.java:119)
at sun.reflect.GeneratedMethodAccessor33.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:624)
at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:613)
at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:68)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy12.batchUpdate(Unknown Source)
.....
...全文
397 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxw0558 2015-10-24
  • 打赏
  • 举报
回复
引用 7 楼 zhe_noob 的回复:
[quote=引用 5 楼 zxw0558 的回复:] [quote=引用 4 楼 zhe_noob 的回复:] 2015-10-20 16:19:34,579 DEBUG [org.springframework.jdbc.core.JdbcTemplate] - <Executing SQL batch update [insert into mes.dbo.testtable(column1,column2,column3) values(?, ?, ?)]> 这句话 啥意思update方法为啥执行的 插入语句?
这个因为我对insert和update都应调用spring的namedParameterJdbcOperations的update方法。[/quote] insert 调用update方法 没问题 不会报错么?[/quote] namedParameterJdbcOperations的update方法不是指的sql里的update,而是影响数据库的意思,会根据传进去的是insert into还是update还是delete都统一使用这个方法。 我理解是这样
这个逗b 2015-10-23
  • 打赏
  • 举报
回复
引用 5 楼 zxw0558 的回复:
[quote=引用 4 楼 zhe_noob 的回复:] 2015-10-20 16:19:34,579 DEBUG [org.springframework.jdbc.core.JdbcTemplate] - <Executing SQL batch update [insert into mes.dbo.testtable(column1,column2,column3) values(?, ?, ?)]> 这句话 啥意思update方法为啥执行的 插入语句?
这个因为我对insert和update都应调用spring的namedParameterJdbcOperations的update方法。[/quote] insert 调用update方法 没问题 不会报错么?
bartholomew4 2015-10-22
  • 打赏
  • 举报
回复
我的项目用的也是jtds 想用官方包的,先看看数据库是什么版本的 SQL SERVER2008:用 Microsoft SQL Server JDBC Driver 2.0 SQL SERVER2008 R2:用 Microsoft SQL Server JDBC Driver 3.0 另外以3.0举例Microsoft SQL Server JDBC Driver 3.0下载下来,解压下来有2个jar,一个是sqljdbc,一个是sqljdbc4. 其中sqljdbc是为JDK1.5用的,而JDK1.6必须用sqljdbc4。否则出错!(1.6以上的JDK本人没有连sql server过) 基于以上特性,建议还是使用jtds,万一哪天你升级了数据库或者JDK还要改jar包,万一忘了这茬就是NO ZUO NO DIE WHY YOU TRY
这个逗b 2015-10-22
  • 打赏
  • 举报
回复
2015-10-20 16:19:34,579 DEBUG [org.springframework.jdbc.core.JdbcTemplate] - <Executing SQL batch update [insert into mes.dbo.testtable(column1,column2,column3) values(?, ?, ?)]> 这句话 啥意思update方法为啥执行的 插入语句?
zxw0558 2015-10-22
  • 打赏
  • 举报
回复
我看到这个错误了,具体是什么原因呢
zxw0558 2015-10-22
  • 打赏
  • 举报
回复
引用 3 楼 bartholomew4 的回复:
我的项目用的也是jtds 想用官方包的,先看看数据库是什么版本的 SQL SERVER2008:用 Microsoft SQL Server JDBC Driver 2.0 SQL SERVER2008 R2:用 Microsoft SQL Server JDBC Driver 3.0 另外以3.0举例Microsoft SQL Server JDBC Driver 3.0下载下来,解压下来有2个jar,一个是sqljdbc,一个是sqljdbc4. 其中sqljdbc是为JDK1.5用的,而JDK1.6必须用sqljdbc4。否则出错!(1.6以上的JDK本人没有连sql server过) 基于以上特性,建议还是使用jtds,万一哪天你升级了数据库或者JDK还要改jar包,万一忘了这茬就是NO ZUO NO DIE WHY YOU TRY
正如我上面所说,我用的是sql server2008,驱动jar也是sqljdbc4.jar。好像这个驱动对某些特性不支持,我也没打算在这个项目里换数据库版本。只解决目前问题就不错了。 jtds比sqljdbc4慢啊,我实测过的。
zxw0558 2015-10-22
  • 打赏
  • 举报
回复
引用 4 楼 zhe_noob 的回复:
2015-10-20 16:19:34,579 DEBUG [org.springframework.jdbc.core.JdbcTemplate] - <Executing SQL batch update [insert into mes.dbo.testtable(column1,column2,column3) values(?, ?, ?)]> 这句话 啥意思update方法为啥执行的 插入语句?
这个因为我对insert和update都应调用spring的namedParameterJdbcOperations的update方法。
sinat_31535993 2015-10-21
  • 打赏
  • 举报
回复
JDBC 3.0 getParameterType call not supported

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧