怎么样使用JdbcTemplate连接数据库?

怎么样使用JdbcTemplate连接数据库?

我们用Spring中的JDBCTemple来写JDBC连接数据库时时,只要一个preparedStatement就搞定。(简单吧)
Spring知道要执行哪些操作(增加,删除,修改)吗?它缺少一个preparedStatement,谁要用时要提供一个SQL 语句,产生你一个preparedStatement的对象,但是statement 不行。
你可以给它一个SQL语句产生,也可以直接给它一个PreparedStatement ,还可以给它一个preparedStatementcreator(要传一个connection)来制造一个PreparedStatement。

老张说:什么叫框架? 自己要写的程序现在用框架写变成写 XML配置文件了.

下面就示例一个程序,用xml配制文件和JdbcTemplate来连接一个数据库(mysql)实现下面三个功能:

1:Spring中用JdbcTemplate的update插入一条数据

2:Spring中用JdbcTemplate的batchUpdate插入一组数据

3:Spring中用JdbcTemplate的RowMapper查询数据

1:首先写一个Student类

package cn.itcast;

public class Student {

private int id;
private String name;
private String sex;
private int salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}

}

2:写一个设置属性的类并继承BatchPreparedStatementSetter这个接口,并实现它的setValues方法

package cn.itcast;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.List;

import org.springframework.jdbc.core.BatchPreparedStatementSetter;

public class InsertPersonStatementCreator implements
BatchPreparedStatementSetter {

List list;

public void setValues(PreparedStatement arg0, int arg1) throws SQLException {
Student stu = (Student) list.get(arg1);
arg0.setString(1, stu.getName());
arg0.setString(2, stu.getSex());
arg0.setInt(3, stu.getSalary());
}

public int getBatchSize() {
return list.size();
}

public void setList(List list) {
this.list = list;
}

}
3:在写一个客户端调用程序

由于时间的因素,没有把三个实现功能分开写,读者自己实验时可以分开写.

package cn.itcast;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.PreparedStatementCreator;
import org.springframework.jdbc.core.RowMapper;

public class JdbcTempleDemo {

private final static String sql = "insert into student (name,sex,salary)values(?,?,?)";

public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext(
"applicationContext.xml");
JdbcTemplate jt = (JdbcTemplate) context.getBean("jt");
InsertPersonStatementCreator ipstc = (InsertPersonStatementCreator) context
.getBean("config");
// 1:Spring中用JdbcTemplate的update插入一条数据
// jt.update("insert into student
// (name,sex,salary)values('bcd','m',1500) ");
// 2:Spring中用JdbcTemplate的batchUpdate插入一组数据
//jt.batchUpdate(sql, ipstc);
//System.out.println("插入成功!...");
//3:Spring中用RowMapper查询数据
final String sql2 = "select * from Student";

RowMapper rowMapper = new RowMapper() {

public Object mapRow(ResultSet rs, int index) throws SQLException {

Student student = new Student();
student.setId(rs.getInt(1));
student.setName(rs.getString(2));
student.setSex(rs.getString(3));
student.setSalary(rs.getInt(4));
return student;
}

};

PreparedStatementCreator psc = new PreparedStatementCreator() {

public PreparedStatement createPreparedStatement(Connection arg0)
throws SQLException {

return arg0.prepareStatement(sql2);
}

};

List list = jt.query(psc, rowMapper);
for (Object obj : list) {
Student stu = (Student) obj;
System.out.println(stu.getId() + "/t" + stu.getName() + "/t"
+ stu.getSex() + "/t" + stu.getSalary());
}

}

}

4:最后写个配置文件就可以了

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="ds" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql:///itcast</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value></value>
</property>
</bean>

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

<bean id="config" class="cn.itcast.InsertPersonStatementCreator">
<property name="list">
<list>
<ref bean="stu1" />
<ref bean="stu2" />
<ref bean="stu3" />
</list>
</property>
</bean>

<bean id="stu1" class="cn.itcast.Student">
<property name="name"><value>ccc</value></property>
<property name="sex"><value>m</value></property>
<property name="salary"><value>3000</value></property>
</bean>
<bean id="stu2" class="cn.itcast.Student">
<property name="name"><value>ddd</value></property>
<property name="sex"><value>f</value></property>
<property name="salary"><value>5000</value></property>
</bean>
<bean id="stu3" class="cn.itcast.Student">
<property name="name"><value>eee</value></property>
<property name="sex"><value>m</value></property>
<property name="salary"><value>1000</value></property>
</bean>

</beans>

以上程序我都实验过,可以顺利跑通,如果读者实验时,遇到什么问题,可以给我留言.