各位帮帮忙,谢谢!!!用了springmvc+spring+jdbc
这是异常信息:log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [insert into X_upfile(id,fileInfo,fileName,upFileDate,fileType,user_id)values(?,?,?,?,?,?)]; Invalid argument value: java.sql.SQLException; nested exception is java.sql.SQLException: Invalid argument value: java.sql.SQLException
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:106)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:607)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:792)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:850)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:858)
at com.yu.dao.impl.FileInfoDaoImpl.save(FileInfoDaoImpl.java:58)
at com.yu.Test.main(Test.java:31)
Caused by: java.sql.SQLException: Invalid argument value: java.sql.SQLException
at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:2348)
at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:1127)
at org.apache.commons.dbcp.DelegatingPreparedStatement.setObject(DelegatingPreparedStatement.java:166)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:346)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:217)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:145)
at org.springframework.jdbc.core.ArgPreparedStatementSetter.setValues(ArgPreparedStatementSetter.java:51)
at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:796)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:591)
... 5 more
这是DaoImpl:
/**
* 数据源
*/
@SuppressWarnings("unused")
private DataSource dataSource;
/**
* spring提供的jdbc操作辅助类
*/
private JdbcTemplate jdbcTemplate;
/**设置数据源*/
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
public void save(FileINfoEntity entity) {
String sql = "insert into X_upfile(id,fileInfo,fileName,upFileDate,fileType,user_id)"
+ "values(?,?,?,?,?,?)";
jdbcTemplate.update(sql, new Object[] {
entity.getId(),entity.getFileInfo(),
entity.getFileName(),entity.getUpFileDate(),
entity.getFileType(),entity.getUser_id(),new int[]{
java.sql.Types.VARCHAR,java.sql.Types.VARCHAR,
java.sql.Types.VARCHAR,java.sql.Types.VARCHAR,
java.sql.Types.VARCHAR,java.sql.Types.VARCHAR
}});
}
这是我的Spring配置文件:<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 读取jdbc.properties配置文件 -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!--配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- 连接池启动时的初始值 -->
<property name="initialSize" value="${initialSize}" />
<!-- 连接池的最大值 -->
<property name="maxActive" value="${maxActive}" />
<!-- 最大空闲值.当经过一个高峰时间后,连接池可以慢慢将已经用不到的连接慢慢释放一部分,一直减少到maxIdle为止 -->
<property name="maxIdle" value="${maxIdle}" />
<!-- 最小空闲值.当空闲的连接数少于阀值时,连接池就会预申请去一些连接,以免洪峰来时来不及申请 -->
<property name="minIdle" value="${minIdle}" />
</bean>
<!--
采用注解方式来配置事务。针对数据源的事务管理器
,把我们定义的数据源注入到DataSourceTransactionManager类的属性dataSource中
-->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!--
引入命名空间: 1.xmlns:tx="http://www.springframework.org/schema/tx
2.http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
采用@Transaction注解方式使用事务管理器
-->
<tx:annotation-driven transaction-manager="txManager" />
<!--配置控制器的映射-->
<bean id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="uploadFile.do">uploadFileAction</prop>
</props>
</property>
</bean>
<!-- 文件Dao -->
<bean id="fileInfoDao" class="com.yu.dao.impl.FileInfoDaoImpl">
<!-- 向属性dataSource注入数据源 -->
<property name="dataSource" ref="dataSource"></property>
</bean>
<!--配置视图-->
<!-- 视图扩展名解析器 对模型视图名称的解析,即在模型视图名称添加前后缀-->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<!-- <property name="prefix" value=""/> -->
<property name="suffix" value=".jsp" />
</bean>
<!--
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
-->
<!-- one of the properties available; the maximum file size in bytes -->
<!-- <property name="maxUploadSize" value="10000000" />10M -->
<!-- </bean>-->
<!-- 上传文件服务 -->
<bean id="uploadFileAction" class="com.yu.service.UploadFileServiceAction">
<property name="commandClass" value="com.yu.entity.FileINfoEntity">
</property>
</bean>
</beans>
+"values(?,?,?,?,?,?)";
LZ的这个ID应该是主键吧,如果是的话,就不需要再写上去了。
回复 @xinyu_huang:错误信息跟上面的一样?你好,我把这个Id改为了逐渐自增之后又出现了这个问题。。。呵呵,谢谢你,我成功了,果然Id是主键,这下学习了com.yu.dao.impl.FileInfoDaoImpl.save(FileInfoDaoImpl.java:58)
看一下58行定位在哪里?
我建议你这样排查一下,手工写一条正确的insertsql,就是将?代替成常量值,然后测试一下,如果成功的话,问题可能会出现在你的转型问题上。另外你要保证你接收的6个参数都有正确的值
回复 @恺哥:嗯,麻烦你了,谢谢回复 @xinyu_huang:我建议你按照我的方法调试一下,手工构建一个sql,看看ok不,ok的话,证明配置没有问题。从异常信息上看,应该是参数转型那块有问题,就是你的那个int[]数组。你可以将这个数组去掉试试我试了试控制台上面的那天insert语句放在Mysql里面没有问题58行定位在这:save这个方法的这个地方jdbcTemplate.update()朋友我的Spring的配置文件有没有问题?谢谢!sql参数类型错误,log中都写出来了。我数据库中的参数全都是varchar类型的+"values(?,?,?,?,?,?)";
LZ的这个ID应该是主键吧,如果是的话,就不需要再写上去了。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。