百度找不到答案,只好求助这里,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)
.....
...全文
409 8 打赏 收藏 转发到动态 举报
写回复
用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
计算机专业毕业实习日记全文共2页,当前为第1页。计算机专业毕业实习日记全文共2页,当前为第1页。计算机专业毕业实习日记 计算机专业毕业实习日记全文共2页,当前为第1页。 计算机专业毕业实习日记全文共2页,当前为第1页。 今天就简单聊聊上面的Struts+Spring+Hibernate吧。 Struts 代表:表示层;Spring代表:业务逻辑层;Hibernate则代表持久层。他们是目前在Java Web编程开发中用得最多的框架,其实这样区分是为了适应软件开发过程中各个分工部门之间保持一致性的需要。说得简单点就是大家都在一个模式下写代码,这样就能保证写出来的程序能被每一个人都能够读懂,而且有些基本的东西它可以自动帮你生成,不用你自己一个一个的敲了,达到了代码复用。这样保证可读性的同时也提高了开发效率,从而降低了成本。Struts这个框架其实就是Java MVC设计模式中简称Model1与Model2Model2的一个具体实现,Spring 则通过提供ICO控制反转,也称依赖注入实现了对对象甚至事务如声明式事务的集中管理,此外还引入了AOP对向切面编程,当然也完全兼容其它框架。Hibernate吗,就是一个实现对象与关系映射的中间件,大家知道,现在的主流数据库还是关系型的,但编程却已经采用了面向对象的思想,如何让编程人员能像操作对象一样,操纵数据库里的数据呢?Hibernate就是这样一种框架。以前Java程序员与数据库打交道都是通过JDBC,还要写 SQL语句,不过Hibernate彻底改变了这一切,它在JDBC之上又作了一次封装,从而实现了不用写SQL语句就可以实现操作数据库。 值得提醒的是,这三个框架都是轻量级的,没有侵入性或者侵入性很低,不像EJB这样的重量级框架,它们都能最大限度的实现代码的可复用。 今天根据经理给的项目,自己尝试的进行修改! 转眼几天又过去了,工作的感觉也渐渐好了起来。值得高兴的是,前些天说的网站数据库加载失败的问题也解决了。多亏了论坛朋友的解答与同学的指导,总结一下主要有以下几个原因:没给SQL Server2000打补丁;数据库连接文件中写的密码与SA用户登陆数据库时的密码没保持一致;我用的是Tomcat的最新版本6,估计有兼容性问题,所以换了版本5;还有就是一开始没安装微软JDBC for SQL Server2000的驱动程序,导致无法加载驱动类库。几天的工夫总归没白费! 今天装了MySQL数据库,想给网站换个数据库管理系统。说实话,用惯了SQL Server2000感觉没什么意思了,就像总是用Windows操作系统一样,用久了就腻了!虽然SQL语句两者相差不大,但初次使用起来还是有点具有挑战性,至少有新鲜感,并促使你不断学习。 遇到的最头痛的要属数据库的备份与还原了。在SQL Server2000中,这非常简单,点击菜单即可。可在MySQL里,就不一样了,可能我刚学,还没上手吧。按照书上的操作把数据文件拷到Mysql安装目录的Data/数据库名 文件夹下,重启MySQL,用客户端连接上,能显示出来有表了,可执行Select语句里就出错了: ERROR 1034 HY000: Incorrect key file for table 'ebs_book'; try to repair it 计算机专业毕业实习日记全文共2页,当前为第2页。计算机专业毕业实习日记全文共2页,当前为第2页。 Google百度了一上午都没解决。只得到一些大概信息,如下: 计算机专业毕业实习日记全文共2页,当前为第2页。 计算机专业毕业实习日记全文共2页,当前为第2页。 frm、MYI、MYD分别对应MyISAM表的表结构\索引\数据文件; frm,myd,myi是属于MySQL存储数据的文件,phpMyAdmin是无法导入的。 phpMyAdmin支持的文件格式为sql文件。 frm格式 MYD格式MYI格式文件导入MySQL中的方法: 导入到sql的data目录 直接复制到新的数据库下就可以了,这样的文件是mysql用来存放表的文件,所以只能放到mysql的安装目录的data目录下,而且如果你是要传到空间上的话,基本上是无法恢复了,除非你把这些数据给空间商要他帮你恢复。 感觉像是判了"死缓"一样,难道数据真的无法恢复了? 感谢您的阅读,祝您生活愉快。 计算机专业毕业实习日记

81,115

社区成员

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

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