2016-03-26 2 views
1

Я пытаюсь получить соединение jdbc, используя приведенный ниже код.Как я могу получить соединение jdbc из org.springframework.jdbc.datasource.DriverManagerDataSource класс

Я использую MySQL jpa2 базы данных и пружину 4. Как я могу получить соединение JDBC и извлекать это значение из базы данных MySQL

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; 
     } 
    } 

При запуске выше этого кода, то я получаю это исключение

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> 

, а затем начать с ject этот объект источника данных в класс 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

Ваш боб является Управляемый компонент JSF, чтобы ваш JdbcTemplate собственность должна быть аннотированный с @ManagedProperty еще ничего не вводить.

Fist Добавить JdbcTemplate в качестве компонента в контексте приложения.

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

Затем в боб аннотировать JdbcTemplate с @ManagedProperty и создать метод setJdbcTemplate.

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

The 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 как он предназначен.

Смежные вопросы