JdbcTemplateエラーのまとめ


一、Springのjdbc操作の簡略化
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オブジェクトに注入できないのか、明日解決してほしいです.ここでメモしてみます.同じ間違いがあったら解決した友達に教えてもらえます.ありがとうございます.