2017-06-07 10 views
0

私は多くの変更を試みましたが、どういうことはしませんでしたが、私のコードで何がうまくいかないのか分かりません。これは春の私の最初のプロジェクトです。私は私のSQLメソッドでnullポインタの例外が与えられています。Springテンプレートで例外を与える

マイJdbcDAO.java

import javax.sql.DataSource; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Map; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.context.annotation.Bean; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.core.support.JdbcDaoSupport; 
import org.springframework.jdbc.datasource.*; 
import org.springframework.stereotype.Repository; 

/** 
* Created by Albedo on 6/6/2017. 
*/ 

@Repository("reviewDAO") 
public class JdbcReviewDAO { 
    private DataSource dataSource; 
    private JdbcTemplate jdbcTemplate; 

    @Autowired 
    public void setDataSource(DataSource dataSource) { 
     this.jdbcTemplate = new JdbcTemplate(dataSource); 
    } 

    @Bean 
    public JdbcTemplate getTemplate(){ 
     return jdbcTemplate; 
    } 

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate){ 
     this.jdbcTemplate = jdbcTemplate; 
    } 

    // sql methods go here 
} 

マイ春-Datasource.xml

<?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-2.5.xsd"> 

    <bean id="dataSource" 
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 

     <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
     <property name="url" value="jdbc:mysql://127.0.0.1:3306/" /> 
     <property name="username" value="root" /> 
     <property name="password" value="admin" /> 
       </bean> 
<bean id="reviewDAO" class="com.JdbcReviewDAO"> 
    <property name="dataSource" ref="dataSource" /> 
</bean> 
</beans> 

マイapplication.java:

import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     //ApplicationContext context = 
     //  new ClassPathXmlApplicationContext("Spring-Review.xml"); 
     JdbcReviewDAO reviewDAO = new JdbcReviewDAO(); 
     reviewDAO.grabFirstPost(1); 
     SpringApplication.run(Application.class, args); 
    } 
} 

(私はパッケージ名を削除した - 残りは彼らを保証プロジェクトで適切に定義されています。また、冗長性を削除するSQLメソッドもあります。 )これはコードではなく、インフラの問題(私の無知、まだnoobieを許している)だと思う。誰でもアイデアはありますか?

エラーログ:エラーが発生します

Exception in thread "main" java.lang.NullPointerException 
    at JdbcDAO.grabFirstPost(JdbcDAO.java:63) 
    at Application.main(Application.java:15) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147) 

Process finished with exit code 1 

方法* \:変数jdbcTemplatenullが含まれているよう

public String grabFirstPost(int id) { 
    String sql = "SELECT * FROM post WHERE postid ='" + id + "'"; 

    String postContent = (String)jdbcTemplate.queryForObject(sql, new Object[] {id}, String.class); 
    return postContent; 
} 
+0

が、私はそれがどのように役立つかわからないとはいえ、助け –

+0

追加を取得するには、エラー・ログを表示してください。 –

+0

JdbcDAO.javaの63行目でエラーが発生します。その行には何がありますか? – meriton

答えて

1

あなたの主な方法は間違っています。アプリケーションコンテキストを読み込むのではなく、直接DAOを作成しています。たぶん、あなたはこれを変更する必要があります:

ApplicationContext context = 
     new ClassPathXmlApplicationContext("Spring-Review.xml"); 
JdbcReviewDAO reviewDAO = context.getBean("reviewDAO"); 
+0

これは、オブジェクトをJDBC reviewDAOに変換できないというエラーが表示されます。 編集:JDBC reviewDAOとしてキャストしようとしましたが、無数のエラーがありました。それは言及する価値があります。 –

+0

質問が回答されました。新しいエラーでエーテルを更新したり、別の質問を作成したりすることができます – tsolakp

+0

エラーが発生した場合、それを回答と呼ぶことはできますか? 私は残念なことに、この1つを自分自身で把握しなければならないようです。 –

0

が見えます。最も可能性が高い理由は、setterに@Autowiredという注釈が付けられていないため、Springはそれを挿入しないということです。

+0

'setDataSource'で初期化されます。 – tsolakp

+0

ああ。他の非注釈付きセッターは私を混乱させました:-)。しかし、setterが実際に呼び出されたかどうかを調べる価値はあるかもしれません。 – meriton

+0

呼び出されているかどうか調べるには? –

関連する問題