传智播客学习日记Day20
2013-08-05 22:03
302 查看
今天是jdbc学习的第三天,通过这几天的学习,学会了怎样编写java程序对数据库进行增删改查,老师的讲解独到,精辟,编写代码的风格严谨,做到精益求精,一段要写很多行的代码,老师教我们抽取多余的代码,得到通用并且精简的代码。
一步一个脚印,老师依然为我们复习了昨天的内容:
1.事务的ACID属性(举例了银行取钱的列子)
2.JDBC的事务处理(强调在出现异常时,调用rollback();方法回滚事务)
3.批处理JDBC语句提高处理速度(记住使用的方法addBatch(String) executeBatch();)
4.Statement的批量处理
5.PreparedStatement批量传参
......
接着老师讲解了这两天我们做的练习题。老师教我们怎么进行DAO的重构,
以下是重构的部分代码:
packagecd.itcast.jdbc.day1.util;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
importjava.util.List;
publicclass DBExecutor {
Connection conn = null;
PreparedStatement preSate = null;
protectedvoid update(String sql,Object...params){
try {
conn= DBUtil.getConn();
preSate = conn.prepareStatement(sql);
for(inti=1;i<params.length;i++){
preSate.setObject(i,params[i]);
}
int n = preSate.executeUpdate();
System.out.println("一共影响了:" + n);
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(conn, preSate, null);
}
}
protectedObject getObject(String sql,HandlderResult hr,Object...params){
ResultSet rs = null;
try{
conn= DBUtil.getConn();
preSate =conn.prepareStatement(sql);
for(inti=1;i<params.length;i++)
preSate.setObject(i,params[i]);
rs = preSate.executeQuery();
Object object=rs.next();
System.out.println("--------------"+object);
if(object!=null){
return hr.getResult(rs);
}
}catch(Exception e){
}finally{
DBUtil.close(conn, preSate, rs);
}
return null;
}
protectedObject getList(String sql,HandlderResult hr,Object...params){
List<Object> list=newArrayList<Object>();
ResultSet rs = null;
try{
conn= DBUtil.getConn();
preSate =conn.prepareStatement(sql);
rs = preSate.executeQuery();
while(rs.next()){
list.add(hr.getResult(rs));
}
return list;
}catch(Exception e){
}finally{
DBUtil.close(conn, preSate, rs);
}
return list;
}
}
这种方式是自己编写工具类。我们也可以使用dbutils,使用dbutils要导入第三方的:commons-dbutils-1.5.jar。
使用dbutils我们常常要用到:QueryRunner类。
1.创建一个QueryRunner类的实例:
QueryRunnerqueryRunner=new QueryRunner(DBUtil.getDataSource());
QueryRunner类的主要方法:
public Object query(Connection conn, Stringsql, Object[] params, ResultSetHandler rsh) throws SQLException:
执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
public int update(Connection conn, Stringsql, Object[] params) throws SQLException:
用来执行一个更新(插入、更新或删除)操作。
public int update(Connection conn, String sql) throws SQLException:
用来执行一个不需要置换参数的更新操作。
一步一个脚印,老师依然为我们复习了昨天的内容:
1.事务的ACID属性(举例了银行取钱的列子)
2.JDBC的事务处理(强调在出现异常时,调用rollback();方法回滚事务)
3.批处理JDBC语句提高处理速度(记住使用的方法addBatch(String) executeBatch();)
4.Statement的批量处理
5.PreparedStatement批量传参
......
接着老师讲解了这两天我们做的练习题。老师教我们怎么进行DAO的重构,
以下是重构的部分代码:
packagecd.itcast.jdbc.day1.util;
importjava.sql.Connection;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.util.ArrayList;
importjava.util.List;
publicclass DBExecutor {
Connection conn = null;
PreparedStatement preSate = null;
protectedvoid update(String sql,Object...params){
try {
conn= DBUtil.getConn();
preSate = conn.prepareStatement(sql);
for(inti=1;i<params.length;i++){
preSate.setObject(i,params[i]);
}
int n = preSate.executeUpdate();
System.out.println("一共影响了:" + n);
} catch (SQLException e) {
e.printStackTrace();
}finally {
DBUtil.close(conn, preSate, null);
}
}
protectedObject getObject(String sql,HandlderResult hr,Object...params){
ResultSet rs = null;
try{
conn= DBUtil.getConn();
preSate =conn.prepareStatement(sql);
for(inti=1;i<params.length;i++)
preSate.setObject(i,params[i]);
rs = preSate.executeQuery();
Object object=rs.next();
System.out.println("--------------"+object);
if(object!=null){
return hr.getResult(rs);
}
}catch(Exception e){
}finally{
DBUtil.close(conn, preSate, rs);
}
return null;
}
protectedObject getList(String sql,HandlderResult hr,Object...params){
List<Object> list=newArrayList<Object>();
ResultSet rs = null;
try{
conn= DBUtil.getConn();
preSate =conn.prepareStatement(sql);
rs = preSate.executeQuery();
while(rs.next()){
list.add(hr.getResult(rs));
}
return list;
}catch(Exception e){
}finally{
DBUtil.close(conn, preSate, rs);
}
return list;
}
}
这种方式是自己编写工具类。我们也可以使用dbutils,使用dbutils要导入第三方的:commons-dbutils-1.5.jar。
使用dbutils我们常常要用到:QueryRunner类。
1.创建一个QueryRunner类的实例:
QueryRunnerqueryRunner=new QueryRunner(DBUtil.getDataSource());
QueryRunner类的主要方法:
public Object query(Connection conn, Stringsql, Object[] params, ResultSetHandler rsh) throws SQLException:
执行一个查询操作,在这个查询中,对象数组中的每个元素值被用来作为查询语句的置换参数。该方法会自行处理 PreparedStatement 和 ResultSet 的创建和关闭。
public int update(Connection conn, Stringsql, Object[] params) throws SQLException:
用来执行一个更新(插入、更新或删除)操作。
public int update(Connection conn, String sql) throws SQLException:
用来执行一个不需要置换参数的更新操作。
相关文章推荐
- [传智播客学习日记]正则提取网页信息并写入文件
- 传智播客-Java学习笔记day20
- [传智播客学习日记]简单工厂模式计算器案例
- [传智播客学习日记]Linq to EF 增删改查
- [传智播客学习日记]常用集合与Dictionary用例
- [传智播客学习日记]多线程Thread类的基本应用
- [传智播客学习日记]10月18日第一天正式上课
- [传智播客学习日记]防止刷新重复提交post请求
- [传智播客学习日记]Socket类的用法
- [传智播客学习日记]C#中的常用XML函数总结(写XML)
- [传智播客学习日记]DOM中的基本window方法、属性及事件
- [传智播客学习日记]有利于SEO的基本原则
- [传智播客学习日记]SQL语句一例通之一——增、删、改、约束
- [传智播客学习日记]写在培训即将过半之前
- 传智播客学习日记Day1
- [传智播客学习日记]C#中的常用XML函数总结(读XML)
- [传智播客学习日记]ADO.Net连接与增删改查
- [传智播客学习日记]近期学习状况
- [传智播客学习日记]手写Web服务器
- 传智播客学习日记Day2