2013-10-17 2 views
8

나는 이것을 알아 내려고 지난 밤을 보냈습니다. HSQLDB 서버가 실행 중이고 JDBC 드라이버를 사용하여 연결할 수 있습니다. 할당의 다음 부분은 Spring 프레임 워크를 사용하는 것과 동일한 일을하는 것입니다. 내 콩 선언, 내 DAO 클래스를 만들고 프로그램이 서버에 연결하지 않습니다. JdbcTemplate을 처음 사용하기 때문에 자동 와이어 링을 수행하지 않아도됩니다. 여기에 내가 가진 파일입니다Jdbc 용 스프링 빈은 작동하지 않습니다.

는 JdbcUserDAO

public class JdbcUserDAO extends JdbcDaoSupport 
        implements UserDAO { 

    public User getUserWithId(int id) { 
     return new User(1,"gamda","test"); 
    } 

    public int howManyUsers() { 
     JdbcTemplate test = getJdbcTemplate(); 
     System.out.println("Got template"); 

     try { 
      getConnection(); 
      System.out.println("Got connection"); 
     } catch (Exception e) { 
      System.out.println("Not connecting"); 
     } 


     int result = test.queryForInt("select count from users"); 
     System.out.println("Query success"); 
     return result; 
    } 

} 

beans.xml 환경 (내 된 .java 파일과 같은 폴더에, 그것을 만드는 경우 차이)

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <bean id="userDAO" class="com.project2.db.JdbcUserDAO"> 
     <property name="dataSource" ref="dataSource"/> 
    </bean> 

    <bean id="questionDAO" class="com.project2.db.JdbcQuestionDAO"> 
     <property name="jdbcTemplate" ref="jdbcTemplate"/> 
    </bean> 

    <bean id="answerDAO" class="com.project2.db.AnswerDAO"> 
     <property name="jdbcTemplate" ref="jdbcTemplate"/> 
    </bean> 

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
     <property name="dataSource" ref="dataSource"/> 
    </bean> 

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
     <property name="driverClassName" value="org.hsqldb.jdbc.JDBCDriver"/> 
     <property name="url" value="jdbc:hsqldb:hsql://localhost/cpsc476;ifexists=true"/> 
     <property name="username" value="SA"/> 
     <property name="password" value="Passw0rd"/> 
    </bean> 
</beans> 

build.xml 개미용 :

<project 
    name="DB_Access" 
    default="compile" 
    xmlns:artifact="antlib:org.apache.maven.artifact.ant"> 

<target name="init"> 
    <mkdir dir="classes" /> 
</target> 

<target name="clean"> 
    <delete dir="classes" /> 
    <delete dir="jar" /> 
</target> 

<target name="compile" depends="init"> 
    <javac srcdir="src" 
      destdir="classes"> 
     <classpath refid="dependency.classpath" /> 
    </javac> 
</target> 

<target name="run" depends="compile"> 
    <java classname="com.project2.db.ListQuestionsAndAnswers"> 
     <classpath> 
      <path refid="dependency.classpath" /> 
      <path location="classes/" /> 
     </classpath> 
    </java> 
</target> 

<target name="jar" depends="compile"> 
    <mkdir dir="jar" /> 
    <jar destfile="jar/db.jar" basedir="classes"> 
     <manifest> 
      <attribute name="Main-Class" value="com.project2.db.dbCon" /> 
     </manifest> 
    </jar> 
</target> 

<artifact:dependencies 
    pathId="dependency.classpath" 
    filesetId="dependency.fileset"> 
    <dependency 
     groupId="org.springframework" 
     artifactId="spring-jdbc" 
     version="3.2.4.RELEASE" /> 

    <dependency 
     groupId="org.springframework" 
     artifactId="spring-beans" 
     version="3.2.4.RELEASE"/> 

    <dependency 
     groupId="org.springframework" 
     artifactId="spring-context" 
     version="3.0.2.RELEASE"/> 

    <dependency 
     groupId="org.hsqldb" 
     artifactId="hsqldb" 
     version="2.3.0" /> 
    <dependency 
     groupId="commons-dbcp" 
     artifactId="commons-dbcp" 
     version="1.4" /> 
</artifact:dependencies> 
</project> 
내가 사용개

그리고 테스트 클래스 : 그것은 새로운 오류

때문에 을 편집 : 자습서를 읽은 후을 편집 내가 "개미 실행"을 수행 할 때이 출력입니다

public class ListQuestionsAndAnswers { 
    public static int main(String[] args) { 

     ApplicationContext appContext = new ClassPathXmlApplicationContext(
     "beans.xml"); 

     JdbcUserDAO test = (JdbcUserDAO) appContext.getBean("userDAO"); 
     int answer = test.howManyUsers(); 
     System.out.println(answer); 
     return 0; 
    } 
} 

제공

>[java] org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDAO' defined in class path resource [beans.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchFieldError: NULL 
>[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:194) 
>[java] at org.apache.tools.ant.taskdefs.Java.run(Java.java:771) 
>[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221) 
>[java] at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135) 
>[java] at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108) 
>[java] at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) 
>[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
>[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
>[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
>[java] at java.lang.reflect.Method.invoke(Method.java:606) 
>[java] at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
>[java] at org.apache.tools.ant.Task.perform(Task.java:348) 
>[java] at org.apache.tools.ant.Target.execute(Target.java:435) 
>[java] at org.apache.tools.ant.Target.performTasks(Target.java:456) 
>[java] at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1393) 
>[java] at org.apache.tools.ant.Project.executeTarget(Project.java:1364) 
>[java] at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
>[java] at org.apache.tools.ant.Project.executeTargets(Project.java:1248) 
>[java] at org.apache.tools.ant.Main.runBuild(Main.java:851) 
>[java] at org.apache.tools.ant.Main.startAnt(Main.java:235) 
>[java] at org.apache.tools.ant.launch.Launcher.run(Launcher.java:280) 
>[java] at org.apache.tools.ant.launch.Launcher.main(Launcher.java:109) 
>[java] Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDAO' defined in class path resource [beans.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchFieldError: NULL 
>[java] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:529) 
>[java] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) 
>[java] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 
>[java] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223) 
>[java] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:292) 
>[java] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194) 
>[java] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628) 
>[java] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
>[java] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
>[java] at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
>[java] at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
>[java] at com.project2.db.ListQuestionsAndAnswers.main(Unknown Source) 
>[java] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
>[java] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
>[java] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
>[java] at java.lang.reflect.Method.invoke(Method.java:606) 
>[java] at org.apache.tools.ant.taskdefs.ExecuteJava.run(ExecuteJava.java:217) 
>[java] at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:152) 
>[java] ... 21 more 
>[java] Caused by: java.lang.NoSuchFieldError: NULL 
>[java] at org.springframework.expression.TypedValue.<clinit>(TypedValue.java:31) 
>[java] at org.springframework.expression.spel.support.StandardEvaluationContext.setRootObject(StandardEvaluationContext.java:82) 
>[java] at org.springframework.expression.spel.support.StandardEvaluationContext.<init>(StandardEvaluationContext.java:71) 
>[java] at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:124) 
>[java] at org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1312) 
>[java] at org.springframework.beans.factory.support.BeanDefinitionValueResolver.evaluate(BeanDefinitionValueResolver.java:225) 
>[java] at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:312) 
>[java] at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) 
>[java] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1387) 
>[java] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128) 
>[java] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) 
>[java] ... 38 more 
>[java] Java Result: -1 

그래서 내 JdbcTemplate null이 아니지만 데이터베이스에 연결하는 데 실패하고 연결을 확인하는 방법을 모르거나 연결할 수 있습니다.

+0

가지고 참조하면 [이 글을 읽을] (http://stackoverflow.com/questions/10464547/how-to-solve-java-lang-nullpointer 예외 오류)? –

+0

제 편집의 문제는 build.xml 의존성에 다른 버전의 Spring jar가 있다는 것입니다. 이제는 문제가 해결되지 않은 SQL 구문 오류가 수정되었습니다. 둘 다 감사합니다 :) – gamda

답변

5

당신은 ID userDAO와 스프링 빈으로 JdbcUserDAO를 정의하지만 종속성을 돌볼하지 않습니다 new 운영자와의 인스턴스를 생성하는

당신은 가져 오기 다음 봄 콩 컨텍스트를 초기화 할 필요가

컨텍스트

+0

지금은 다른 질문입니다, 도서관 갈등이 다시 터어 널을 검토하십시오 –

관련 문제