2016-03-26 11 views
1

以下のコードを使用してjdbc接続を取得しようとしています。org.springframework.jdbc.datasource.DriverManagerDataSourceクラスからjdbc接続を取得するにはどうすればいいですか

は、私は、JDBCコネクションを取得し、このコードの上で実行される

import java.io.Serializable; 
    import java.sql.Connection; 
    import java.sql.PreparedStatement; 
    import java.sql.ResultSet; 
    import java.sql.SQLException; 
    import javax.faces.bean.ManagedBean; 
    import javax.faces.bean.ViewScoped; 
    import javax.sql.DataSource; 
    import org.springframework.jdbc.core.JdbcTemplate; 

    @ManagedBean 
    @ViewScoped 
    public class JDBCTest implements Serializable{ 
     private JdbcTemplate jdbcTemplate; 
    void setDataSource(DataSource dataSource) { 
      this.jdbcTemplate = new JdbcTemplate(dataSource); 
     } 
     private static final long serialVersionUID = 1L; 
     public void testDB(){ 
      Connection con=null; 
      try { 
       con = getJdbcTemplate().getDataSource().getConnection(); 
       PreparedStatement pst=con.prepareStatement("select * from global_class"); 
       ResultSet st=pst.executeQuery(); 
       while(st.next()){ 
        System.out.println("Class Name :"+st.getString(1)); 
       } 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } 

     public JdbcTemplate getJdbcTemplate() { 
      return jdbcTemplate; 
     } 

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

が、私は、この例外を取得してMySQLデータベースからこの値を取得するにはどうすればよいのMySQLデータベースJPA2と、スプリング4を使用

WARNING: #{jDBCTest.testDB}: java.lang.NullPointerException 
javax.faces.FacesException: #{jDBCTest.testDB}: java.lang.NullPointerException 
    at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:118) 
    at org.springframework.faces.webflow.FlowActionListener.processAction(FlowActionListener.java:71) 
    at org.springframework.faces.model.SelectionTrackingActionListener.processAction(SelectionTrackingActionListener.java:64) 
    at javax.faces.component.UICommand.broadcast(UICommand.java:315) 
+0

私はあなたを助けることができるように完全なコードを投稿してください。 – Francisunoxx

+0

あなたのコードはどこですか? –

+0

*「この**コードを実行すると、私は...」*ここに「これ」とは何ですか?コードはどこですか? – user2004685

答えて

0

データベース設定をコンテキストファイルで次のように指定します。

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

    <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
    <property name="url" value="jdbc:mysql://localhost:3306/db" /> 
    <property name="username" value="root" /> 
    <property name="password" value="password" /> 
</bean> 

バインド依存性注入を使用して、このデータソースオブジェクトをJDBCTestクラスに取得します。 例:

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

または

<bean id="jdbcTest" class="JDBCTest"><property name="dataSource" ref="datasource"/></bean> 
+0

提供されたコード を使用してjdbc接続を正常に作成します。 と@ManagedProperty( "#{jdbcTemplate}")ありがとうございました貴方の貴重な時間をくれてありがとう –

+0

こんにちは@Nalla Srinivas、私はあなたと似たようなことをやっています。私は 'java.lang.NullPointerException'を取得しますが、例外は' Connection conn = jdbcTemplate.getDataSource()。getConnection(); 'であることを示すスタックトレースを見ています。この問題についてご意見をお寄せくださいますか?ありがとうございました。 – Learner

0

あなたのBeanはそうあなたJdbcTemplateプロパティは@ManagedProperty何もないと注釈されるべきJSFマネージドBeanですが注入されます。

Fistは、アプリケーションコンテキストにJdbcTemplateをBeanとして追加します。

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

は、その後、あなたの豆で@ManagedPropertyであなたJdbcTemplateに注釈を付けるとsetJdbcTemplateメソッドを作成します。

@ManagedProperty("#{jdbcTemplate}") 
private JdbcTemplate jdbcTemplate; 

JdbcTemplateは、JDBCでより簡単に作業できるように設計されています。だからそれを使用してください。あなたが構築したものは、同じ醜いことをする非常に複雑な方法です。 JdbcTemplateを正しく使用してください。

コードは次のようになります。

getJdbcTemplate().query("select * from global_class", new RowCallbackHandler() { 
    public void procesRow(ResultSet rs, int row) { 
     System.out.println("Class Name :" + rs.getString(1)); 
    } 
}); 

これはコードと同じですが、意図したとおりにJdbcTemplateを使用します。

関連する問題