最基础的数据库连接JDBC
Connection conn=null;
Statement statement=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
// 装载数据库的驱动
Class.forName("com.mysql.jdbc.Driver");
// 建立数据库连接
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/jj","root","root");
// 事务处理
conn.setAutoCommit(false);
// 创建Statement
statement=conn.createStatement();
// 设置SQL执行的参数
String sql="insert into user values(null,‘csdn1‘,‘csdn1‘)";
// 执行对数据库的操作
statement.execute(sql);
// 处理执行结果
// 事务处理
conn.commit();
// 处理执行过程中的异常
// 释放各种资源,关闭数据库连接
statement.close();
conn.close();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
}Spring JDBC所需要的jar包:
JDBCTemplate是Spring JDBC核心包的核心类。
将JdbcTemplate类作为一个普通Bean交给Spring的IOC容器管理,就可以直接得到该对象的实例进行各种数据库操作(增加、修改、查询和删除)。
1.使用JdbcTemplate进行数据访问:
初始化JdbcTemplate
初始化JdbcTemplate很容易,只需要向它的构造方法传入它所使用的DataSource便可以。如果使用Jakarta Commons DBCP,那么初始化代码如下所示:
1 |
BasicDataSource
dataSource = new BasicDataSource(); |
2 |
dataSource.setDriverClassName("com.mysql.jdbc.Driver"); |
3 |
dataSource.setUrl("jdbc:mysql://localhost/mysql?characterEncoding=UTF-8"); |
4 |
dataSource.setUsername("root"); |
5 |
dataSource.setPassword("root"); |
6 |
JdbcTemplate
jdbcTemplate = new JdbcTemplate(dataSource); |
也可以通过无参的构造方法构造JdbcTemplate,然后通过setDataSource(DataSource dataSource)来设置其dataSource。
上述这种方法是通过编码的方式构造JdbcTemplate,如果应用程序使用spring的IOC容器,其初始化工作便可移植到容器的配置文件applicationContext.xml当中:
01 |
<!--
dataSource --> |
02 |
<bean id="dataSource" |
03 |
class="org.apache.commons.dbcp.BasicDataSource" |
04 |
> |
05 |
|
06 |
<property name="driverClassName"> |
07 |
<value>com.mysql.jdbc.Driver</value> |
08 |
</property> |
09 |
<property name="url" value="jdbc:mysql://localhost:3306/jj?characterEncoding=UTF-8" /> |
10 |
<property name="username" value="root" /> |
11 |
<property name="password" value="root" /> |
12 |
</bean> |
13 |
<!--
jdbcTemplate --> |
14 |
<bean id="jdbcTemplate" |
15 |
class="org.springframework.jdbc.core.JdbcTemplate"> |
16 |
<property name="dataSource"> |
17 |
<ref bean="dataSource" /> |
18 |
</property> |
19 |
</bean> |
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
JdbcTemplate jt = (JdbcTemplate) ctx.getBean("jdbcTemplate");
//1.构建sql语句
//insert into user(name,pass) values(‘java‘,‘ym‘)
String sql="delete from user where id=1";
jt.execute(sql);String sql = "insert into user(name,pass,sex,age) values(?,?,?,?)"; // 构建参数 Object[] sargs = new Object[4]; sargs[0] = "xx"; sargs[1] = "111"; sargs[2] = "nv"; sargs[3] = 12; // 构建参数类型 int[] argsTye = new int[4]; argsTye[0] = Types.VARCHAR; argsTye[1] = Types.VARCHAR; argsTye[2] = Types.CHAR; argsTye[3] = Types.INTEGER; jt.update(sql, sargs, argsTye);
String sql="select *from user";
//返回查询List List<Map<String, Object>>
List<Map<String, Object>> list=jt.queryForList(sql);
for(Map map:list){
Set keys=map.keySet();
Iterator it=keys.iterator();
while(it.hasNext()){
String key=it.next().toString();
System.out.println(key+":"+map.get(key));
// System.out.println(map.get(key));
}
}
// 占位符的替代 ,使用:id作为占位符
// 必须使用构造函数注入DataSource
NamedParameterJdbcTemplate njt = new NamedParameterJdbcTemplate(
(BasicDataSource) ctx.getBean("dataSource"));
String sql = "delete from user where id=:id";
//1.
Map map = new HashMap();
map.put("id", 4);
njt.update(sql, map);
//2.
/*MapSqlParameterSource mapSqlParameterSource=new MapSqlParameterSource("id",new Integer("3"));
njt.update(sql, mapSqlParameterSource);*/
1)NamedParameterJdbcTemplate初始化:可以使用DataSource或JdbcTemplate 对象作为构造器参数初始化;
2)delete from user where id=:id:其中“:id”就是命名参数;
用占位符写的删除
//4.删除 String sql="delete from user where id=?"; Object[] args1=new Object[1]; args1[0]=5; int[] argType=new int[1]; argType[0]=Types.INTEGER; jt.update(sql, args1, argType);
3) update(insertSql, paramMap):其中paramMap是一个Map类型,包含键为“name”,值为“name5”的键值对,也就是为命名参数设值的数据;
//5.更新数据 String sql="update user set name=? where id=?"; Object[] args1=new Object[2]; args1[0]="spring"; args1[1]=8; int[] a=new int[2]; a[0]=Types.VARCHAR; a[1]=Types.INTEGER; jt.update(sql, args1, a);
4)query(selectSql, paramMap, new RowCallbackHandler()……):类似于JdbcTemplate中介绍的,唯一不同是需要传入paramMap来为命名参数设值;
package www.csdn.jdbc.model;
public class User {
private int id;
private String name;
private String pass;
private String sex;
private Integer age;
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 String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
String sql="select * from user"; //封装返回值
RowMapper map=new RowMapper() {
// 封装为一个自定义对象
//回调方法把结果集封装成自定义对象
@Override
public Object mapRow(ResultSet rs, int rownum) throws SQLException {
User user=new User();
//列号索引
user.setId(rs.getInt(1));
user.setName(rs.getString(2));
user.setPass(rs.getString(3));
user.setSex(rs.getString(4));
user.setAge(rs.getInt(5));
System.out.println("行号:"+rownum);
return user;
}
};
//多条数据查询
List<User> users=jt.query(sql, map);
for(User u:users){
System.out.println(u.getId()+"=="+u.getName()+u.getPass()+"=="+u.getSex()+"=="+u.getAge());
}
}5)update(deleteSql, paramSource):类似于“update(insertSql, paramMap)”,但使用SqlParameterSource参数来为命名参数设值,此处使用MapSqlParameterSource实现,其就是简单封装java.util.Map。
NamedParameterJdbcTemplate类为命名参数设值有两种方式:java.util.Map和SqlParameterSource:
1)java.util.Map:使用Map键数据来对于命名参数,而Map值数据用于设值;
2)SqlParameterSource:可以使用SqlParameterSource实现作为来实现为命名参数设值,默认有MapSqlParameterSource和BeanPropertySqlParameterSource实现;MapSqlParameterSource实现非常简单,只是封装了java.util.Map;而BeanPropertySqlParameterSource封装了一个JavaBean对象,通过JavaBean对象属性来决定命名参数的值。
原文:http://blog.csdn.net/yantingmei/article/details/22413925