2016-12-28 6 views
0

私はSpring MVCでフォームを作成しました。私は自分のデータベースのデータを埋めるためにそれを使いたい。 私はDAOを使用しています。 sysoutを使用すると、私はconsolにデータを表示しますが、クエリを実行することは不可能です。DAO-Spring MVC:更新クエリを実行する際のエラー

package controlleurs; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.List; 

import javax.sql.DataSource; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.core.RowMapper; 
import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; 
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; 
import org.springframework.stereotype.Component; 
import org.springframework.stereotype.Repository; 

@Repository("RepertoryDAO") 
public class RepertoryDAO { 


    private JdbcTemplate myJdbc; 
    public RepertoryDAO(){ 
    } 

    @Autowired 
    public void setMonJdbc(DataSource ds) { 
     //this.JdbcTemplate = new JdbcTemplate(ds); 
     this.myJdbc = new JdbcTemplate(ds); 
    } 


    //Display data 
    public List<Repertory> getRepetories(){ 


     return myJdbc.query("select*from main",new RowMapper<Repertory>(){ 

      public Repertory mapRow(ResultSet rs, int rowNum1) 
        throws SQLException { 

       Repertory rp=new Repertory(); 
       rp.setId(rs.getInt("id")); 
       rp.setName(rs.getString("name")); 
       return rp; 
      } 
     }); 
    } 

    //Add a repertory in database 
    public void addRepertory(String name, String url, int bl, int noFree, String topic){ 

     String backlinkRequired=Integer.toString(bl); 

     MapSqlParameterSource params = new MapSqlParameterSource(); 
     params.addValue("name", name); 
     System.out.println(name); 
     params.addValue("url", url); 
     System.out.println(url); 
     params.addValue("lienRetour", backlinkRequired); 
     System.out.println(backlinkRequired); 
     params.addValue("payant", noFree); 
     System.out.println(noFree); 
     params.addValue("topic", topic); 
     System.out.println(topic); 

     System.out.println("jdbc"+ getMonJdbc().toString()); 
     this.myJdbc.update("insert into main (name,url,lienRetour,payant,topic) values (:name,:url,:lienRetour,:payant,:topic)",params); 
    } 

    public JdbcTemplate getMonJdbc() { 
     return this.myJdbc; 
    } 

この行はコンソールに何かを与えます。

System.out.println("jdbc"+ getMonJdbc().toString()); 

コンソール表示このエラー:あなたの助けのための

déc. 28, 2016 2:58:32 PM org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet [MyServletSpring] in context with path [/monProjetSpring] threw exception [Request processing failed; nested exception is java.lang.NullPointerException] with root cause java.lang.NullPointerException at controlleurs.RepertoryDAO.addRepertory(RepertoryDAO.java:65) at controlleurs.NewDirectory.directoryRegistered(NewDirectory.java:61) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)

感謝。

+1

sqlクエリを実行し、別のsqlクライアントを使用してdbに対して実行し、動作するかどうか確認してください。私の推測では、あなたのクエリは正しくフォーマットされていません。各 'カンマ'の後ろに 'スペース'がありません。 – yogidilip

+0

ありがとうございますが、それは私を助けません。私はいくつかのスペースを追加しますが、常に同じ問題があります。 – IkBenRijsel

+0

エラーは、getMonJdbc()がnullを返すことを示します。したがって、toString()メソッドは例外をスローしています。あなたの 'public void setMonJdbc(DataSource ds)'メソッドに対する依存性注入が正しく動作していないと思います – ZeusNet

答えて

0

基本的なSpringの問題です。

  1. まず、dataSourceが登録されているかどうかを調べてください。autowired注釈はdataSourceパラメータを挿入しようとしています。正しい場合は、プロパティとしてデータソースを使用してxml構成ファイルにjdbcTemplate Beanを定義することができます。

  2. 次に、jdbcTemplate定義のすぐ上の@AutowiredをDAOクラスに配置できます。

これは、あなたが望む方法ではないかもしれませんが、簡単に動作します。

関連する問題