JdbcTemplateエラーのまとめ
9679 ワード
一、Springのjdbc操作の簡略化
1、接続管理2、jdbc操作の重複コードパッケージ
二、JdbcTemplateの問題
JdbcTemplateはjdbc操作を簡略化する上で不可欠な重要な一環である.具体的な問題はコードの中で説明して理解しましょう.以下はxmlプロファイル依存注入によるものです.JdbcTemplateオブジェクト
何時間かかっても理解できません.なぜUserDaoオブジェクトに注入できないのか、明日解決してほしいです.ここでメモしてみます.同じ間違いがあったら解決した友達に教えてもらえます.ありがとうございます.
1、接続管理2、jdbc操作の重複コードパッケージ
二、JdbcTemplateの問題
JdbcTemplateはjdbc操作を簡略化する上で不可欠な重要な一環である.具体的な問題はコードの中で説明して理解しましょう.以下はxmlプロファイル依存注入によるものです.JdbcTemplateオブジェクト
UserDaoエンティティクラスの部分:
public class UserDao {
/**
* spring jdbc :
* 1、
* 2、jdbc
*/
// IOC
public JdbcTemplate jdbcTemplate;
public void setjdbcTemplate(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
// JdbcTemplate
public void save() {
String sql = "INSERT INTO detp(deptName) VALUES('test');";
jdbcTemplate.update(sql);
}
/**
* 2、jdbc
*/
public Detp findById(int id) {
String sql = "select * from detp where deptId=?";
List list = jdbcTemplate.query(sql, new MyResult(),id);
return (list!=null&&list.size()>0) ? list.get(0) : null;
}
class MyResult implements RowMapper{
//
@Override
public Detp mapRow(ResultSet arg0, int arg1) throws SQLException {
Detp detp = new Detp();
detp.setDeptId(arg0.getInt("deptId"));
detp.setDeptName(arg0.getString("deptName"));
return detp;
}
}
}
メインプログラムの呼び出し:public class App {
// IOC
ApplicationContext ac = new ClassPathXmlApplicationContext("step10_jdbc/application.xml");
@Test
public void testjdbc()
{
// UserDao userDao = (UserDao) ac.getBean("userDao");
JdbcTemplate jdbcTemplate = (JdbcTemplate) ac.getBean("jdbcTemplate");
UserDao userDao = new UserDao();
userDao.setjdbcTemplate(jdbcTemplate);
userDao.save();
// System.out.println(userDao.findById(2));
}
}
userDao依存注入を採用すると、メインプログラムでは**ac.getBean("jdbcTemplate");呼び出し時に以下のエラーが発生します.org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDao' defined in class path resource [step10_jdbc/application.xml]: Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.jdbc.core.JdbcTemplate' for property 'jdbcTemplate'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'org.springframework.jdbc.core.JdbcTemplate' for property 'jdbcTemplate': no matching editors or conversion strategy found
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:584)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:144)
at org.springframework.context.support.ClassPathXmlApplicationContext.(ClassPathXmlApplicationContext.java:85)
at step10_jdbc.App.(App.java:11)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:217)
at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:266)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.lang.String' to required type 'org.springframework.jdbc.core.JdbcTemplate' for property 'jdbcTemplate'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'org.springframework.jdbc.core.JdbcTemplate' for property 'jdbcTemplate': no matching editors or conversion strategy found
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:590)
at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:604)
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:219)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1697)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1653)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1400)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:575)
... 33 more
Caused by: java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'org.springframework.jdbc.core.JdbcTemplate' for property 'jdbcTemplate': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:299)
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:585)
... 39 more
これまで解決できなかった場合は、UserDaoオブジェクトをIOC容器に注入せずに直接オブジェクトを作成し、**ac.getBean(「jdbcTemplate」)**を通じてJdbcTemplateを取得し、UserDaoオブジェクトに導入してsave方法を呼び出すことで、スムーズに通過することができます.何時間かかっても理解できません.なぜUserDaoオブジェクトに注入できないのか、明日解決してほしいです.ここでメモしてみます.同じ間違いがあったら解決した友達に教えてもらえます.ありがとうございます.