2013-10-17 11 views
8

私は昨夜これを理解しようとしました。私はHSQLDBサーバを稼働させており、それにJDBCドライバを使って接続できます。代入の次の部分は、同じことをするが、Springフレームワークを使用することです。私は自分の豆を宣言し、DAOクラスを作成し、プログラムはサーバーに接続しません。 JdbcTemplateを初めて使用しているので、オートワイヤリングを行うことは想定されていません。ここで私が持っているファイルは、次のとおりです。JdbcのSpring Beansが機能しない

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(ant):

<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とのSpring BeanとしてJdbcUserDAOを定義しているが、あなたはその依存関係の世話をしませんnew演算子でそのインスタンスを作成している

あなたがフェッチそして、春のBeanコンテキストを初期化し、する必要が

コンテキスト

+0

今は別の質問ですが、図書館の競合です –

関連する問題