我正在使用Java和Spring创建一个Web应用程序。我需要连接到MySQL数据库并检索Servlet中的数据以显示在我的JSP页面中。我搜索了很多并且有很多例子可以连接到数据库,但没有什么对我有用
这是我的applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:batch="http://www.springframework.org/schema/batch"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.1.xsd
http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch-2.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- 1) USE ANNOTATIONS TO CONFIGURE SPRING BEANS -->
<context:component-scan base-package="com.app.any" />
<!-- 2) DATASOURCE, TRANSACTION MANAGER AND JDBC TEMPLATE -->
<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/mydatabase" />
<property name="username" value="root" />
<property name="password" value="admin" />
<bean>
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="getTargetFields" class="com.app.myapp.controllers.controllerClasses.GetTargetFields">
</bean>
<beans
在我的servlet中,我正在调用一个名为GetTargetFields
的类。
在那个类中,我想传递查询并检索数据。但我不知道如何通过。使用query()
类的JdbcTemplate
方法尝试了许多示例。但它显示错误,因为我不知道要传递哪个类以及返回类型是什么。其返回类型为Object
。我试过ResultSet
,但显示错误。
我想要的是在我的GetTargetFields
类中我想传递一个select查询并返回结果,我想将结果保存在ResultSet中。
public class GetTargetFields
{
public void getTargetField()
{
// What code should be here?
}
}
任何人都可以帮我编码吗?感谢
更新1
public class GetTargetFields
{
private JdbcTemplate jdbcTemplate;
private DataSource dataSource;
public static ResultSet rs=null;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(this.dataSource);
}
public ResultSet getTargetField() // I know the code is wrong. But I tried this
{
ResultSet rs=jdbcTemplate.query("SELECT * from employee",
ResultSet); //shows error. I want to get the result in ResultSet
//Or how the data will be stored in *Collector* and I can access each column fields?
return rs;
}
}
答案 0 :(得分:0)
您没有将jdbcTemplate实例注入或自动装入GetTargetFields类。它应该像这样注入。
<bean id="getTargetFields" class="com.app.myapp.controllers.controllerClasses.GetTargetFields">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
或使用@Autowired
注释自动装配它。
在当前情况下,即使你有一个数据源的setter方法,你也不会注入它。您不需要创建JdbcTemplate
的新实例,因为您已经在app-context文件中完成了bean定义,Spring将为您实例化它。所以正确的实现应该是注入jdbcTemplate
答案 1 :(得分:0)
您需要使用以下语法
jdbcTemplate.query("", new ResultSetExtractor<Object>() {
@Override
public Object extractData(ResultSet rs) throws SQLException,
DataAccessException {
//do what ever you want to do with rs
return null;
}
});
答案 2 :(得分:0)
您必须使用以下方法手动注入jdbcTemplate对象:
<bean id="getTargetFields" class="com.app.myapp.controllers.controllerClasses.GetTargetFields">
<property name="jdbcTemplate" ref="jdbcTemplate" />
</bean>
然后,您可以将注入jdbcTemplate
对象的类更改为:
public class GetTargetFields {
private JdbcTemplate jdbcTemplate;
...
}
或使用@Autowired
和@Repository
注释。
请参阅以下Spring参考的前半部分,其中显示了如何使用这两个注释来消除大部分复杂性:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html
答案 3 :(得分:0)
您的GetTargetFields类
中有以下方法public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
this.jdbcTemplate = new JdbcTemplate(this.dataSource);
}
这意味着,在bean初始化期间,您可以将数据源作为将由spring框架注入的属性。
<bean id="getTargetFields" class="com.app.myapp.controllers.controllerClasses.GetTargetFields">
<property name="dataSource" ref="dataSource">
</bean>