首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何从org.springframework.jdbc.datasource.DriverManagerDataSource类获取jdbc连接?

如何从org.springframework.jdbc.datasource.DriverManagerDataSource类获取jdbc连接?
EN

Stack Overflow用户
提问于 2016-03-26 14:18:03
回答 2查看 1.2K关注 0票数 1

我正在尝试使用下面的代码获取jdbc连接。

我使用的是mysql数据库jpa2和Spring4。如何获取jdbc连接并从mysql数据库中检索该值

代码语言:javascript
代码运行次数:0
运行
复制
    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;
        }   
    }

当在此代码上运行时,我会得到此异常

代码语言:javascript
代码运行次数:0
运行
复制
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)
EN

回答 2

Stack Overflow用户

发布于 2016-03-26 15:14:18

在上下文文件中指定数据库配置,如下所示

代码语言:javascript
代码运行次数: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>

然后开始使用spring依赖注入将这个数据源对象注入到JDBCTest类中。例如:

代码语言:javascript
代码运行次数:0
运行
复制
 @autowired
 public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

代码语言:javascript
代码运行次数:0
运行
复制
 <bean id="jdbcTest" class="JDBCTest"><property name="dataSource" ref="datasource"/></bean>
票数 0
EN

Stack Overflow用户

发布于 2016-03-26 15:53:54

您的bean是一个Jsf托管bean,因此您的JdbcTemplate属性应该使用@ManagedProperty进行注释,否则将不会注入任何内容。

首先,将JdbcTemplate作为bean添加到应用程序上下文中。

代码语言:javascript
代码运行次数:0
运行
复制
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
    <property name="dataSource" ref="dataSource" />
</bean>

然后在bean中用@ManagedProperty注释JdbcTemplate并创建一个setJdbcTemplate方法。

代码语言:javascript
代码运行次数:0
运行
复制
@ManagedProperty("#{jdbcTemplate}")
private JdbcTemplate jdbcTemplate;

JdbcTemplate旨在使使用JDBC变得更容易。那就用它吧。你所构建的是一种非常复杂的方式来做同样丑陋的事情。正确使用JdbcTemplate以及它的用途。

你的代码应该是这样的。

代码语言:javascript
代码运行次数:0
运行
复制
getJdbcTemplate().query("select * from global_class", new RowCallbackHandler() {
    public void procesRow(ResultSet rs, int row) {
        System.out.println("Class Name :" + rs.getString(1));
    }
});

这与您的代码执行相同的操作,但使用的是预期的JdbcTemplate

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36232288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档