Java 如何从org.springframework.jdbc.datasource.driverManager数据源类获取jdbc连接
我正在尝试使用下面的代码获取jdbc连接 我使用mysql数据库jpa2和spring 4。如何获取jdbc连接并从mysql数据库检索该值Java 如何从org.springframework.jdbc.datasource.driverManager数据源类获取jdbc连接,java,spring,hibernate,jdbc,Java,Spring,Hibernate,Jdbc,我正在尝试使用下面的代码获取jdbc连接 我使用mysql数据库jpa2和spring 4。如何获取jdbc连接并从mysql数据库检索该值 import java.io.Serializable; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import
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)
在上下文文件中指定数据库配置,如下所示
<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>
或
在上下文文件中指定数据库配置,如下所示
<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>
或
您的bean是一个Jsf托管bean,因此您的
JdbcTemplate
属性应该用@ManagedProperty
注释,否则不会注入任何内容
首先将JdbcTemplate
作为bean添加到应用程序上下文中
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
JDBC模板
旨在使使用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
。您的bean是一个Jsf托管bean,因此您的JdbcTemplate
属性应该用@ManagedProperty
注释,否则不会注入任何内容
首先将JdbcTemplate
作为bean添加到应用程序上下文中
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
JDBC模板
旨在使使用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));
}
});
这与您的代码相同,但按预期使用了
jdbc模板。请发布您的完整代码,以便我可以帮助您。“当我执行此代码时,我得到…”这里的是什么?代码在哪里?您从spring容器中注入了数据源对象吗?我将使用@ManagedProperty(“#{jdbcTemplate}”)解决此问题。请发布您的完整代码,以便我可以帮助您。“当我执行此代码时,我得到…”这里的是什么?代码在哪里?您从spring容器注入数据源对象了吗?我将使用@ManagedProperty(“#{jdbcTemplate}”)解决这个问题。我将使用您提供的代码和@ManagedProperty(“#{jdbcTemplate}”)成功创建jdbc连接。谢谢先生给我宝贵的时间您好,@Nalla Srinivas,我正在做与您的回答类似的事情,但是我得到了java.lang.NullPointerException
,我查看了堆栈跟踪,异常表明它位于Connection conn=jdbcTemplate.getDataSource().getConnection()中代码>。你介意分享一下你对这个问题的建议吗?谢谢。我将使用您提供的代码和@ManagedProperty(“#{jdbcTemplate}”)成功创建jdbc连接。谢谢先生给我宝贵的时间您好,@Nalla Srinivas,我正在做与您的回答类似的事情,但是我得到了java.lang.NullPointerException
,我查看堆栈跟踪,异常表明它位于Connection conn=jdbcTemplate.getDataSource().getConnection()中代码>。你介意分享一下你对这个问题的建议吗?非常感谢。