到现在我们先想想,我们学习了数据库操作哪些内容?????
-
先是JDBC入门学习,学习Java连接数据库
-
然后将连接数据库getConnection和释放连接release提取出来, 封装成jdbcutils
-
然后就是事务,主要是学习下面几个函数使用
Connection.setAutoCommit(false);//开启事务(start transaction) Connection.rollback();//回滚事务(rollback) Connection.commit();//提交事务(commit) Savepoint sp = conn.setSavepoint(); Conn.rollback(sp); Conn.commit();//回滚后必须通知数据库提交事务
-
然后就是学习数据库连接池,主要学习两个 DBCP和C3P0,主要是改进jdbcutils
-
然后就是编写自己的JDBC框架,说白了就是将CRUD整合成update函数和query函数
我们先来说说 update 万能更新
看看下面的几个sql语句
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
UPDATE Person SET FirstName = 'Fred' WHERE LastName = 'Wilson'
DELETE FROM Person WHERE LastName = 'Wilson'
认真观察, 实体的CUD操作代码基本相同,仅仅发送给数据库的SQL语句不同而已,我们就把sql语句拆分成一个框架sql语句和实体sql对象 String sql, Object params[]
这个好理解,所以写成万能update也简单
/**
* @Method: update
* @Description: 万能更新
* @param sql 要执行的SQL
* @param params 执行SQL时使用的参数
* @throws SQLException
*/
public static void update(String sql,Object params[]) throws SQLException{
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try{
conn = getConnection();
st = conn.prepareStatement(sql);
for(int i=0;i<params.length;i++){
st.setObject(i+1, params[i]);
}
st.executeUpdate();
}finally{
release(conn, st, rs);
}
}
但是!!!!!!
query不好理解,因为select * from table 这个* 不同select 就有不同的对象,所以写万能query就有点麻烦。
万幸有Object对象来指向它的万物子孙
Object obj = new Person() ; Object obj1 = new Cat() ; Object obj2 = new Shop() ; .......
因此, 我们需要将具体的类传入到参数中,来保存select查询的结果
我们来一步步看看用户的操作思路
首先,我们要从数据库中把我们想要查询的字段给查询出来嘛,
每个使用select 的用户知道数据库的table , 知道table包含哪些字段嘛, 所以就会设置相应的类来存储这些字段
不仅获取到table内容,
我们还要知道字段名,这个很重要 ,你想想,我们光光从数据库取出数据是不够的, 还要把数据装填给对象啊,
比如:select * from student ,执行了条sql后, 内容保存在哪里呢?
好吧,我们在java的domain 写个Student类, 然后new一个Student对象嘛,
但是咋个一一赋值呢? 所以我们要知道字段名,下面这几行代码就可以获取到,
Connection conn = JdbcUtils.getConnection();
String sql = "