数据库操作
准备工作——建表
如:学生表(Student)包含属性(id、姓名、年龄、性别)
创建Student类,(属性、构造、封装、tostring方法)
创建Dao类,增删改查均写在Dao类中。
- 增(insert into):
insert(String sql,Object…params)——最通用的写法,传入sql语句与占位符的值。
(1) 获取数据库的连接;
(2) 获取PreparedStatement对象(sql语句);
(3)设置占位符与占位符的值;
(4)executeUpdate提交修改;
(5)关闭资源。
代码如下:
public void insert(String sql,Object...params){
Connection conn=null;
PreparedStatement ps=null;
try {
conn=JDBCUitl.getConnection();
ps=conn.prepareStatement(sql);
setParams(ps,params);
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUitl.close(conn, ps,null);
}
}
测试:
BaseDao<Score> baseDao = new BaseDao<Score>();
String sql = "insert into Member values(?,?)";
baseDao.insert(sql,"05","王五");
执行前:
执行后:
- 删、改(delect from、update 表名 set):
删改操作与增类似,仅仅测试是的aql语句不同,不多赘述。 - 查(select * from):
数据库查操作需要把查询结果存入结果集合(ResultSet rs)中,考虑到对象类型问题需要编写rowMapper接口,根据操作不同的表的情况来实现接口,查询方法需要设置返回值(List).
(1)获取数据库的连接;
(2)定义List list;
(3)获取PreparedStatement对象;
(4)获取ResultSet对象;
(5)设置占位符与占位符的值;
(6)判断如果查询存在数据即存入list中(list.add);
(7)executeUpdate提交修改;
(8)关闭资;
(9)返回list。
实现代码如下:
public List<T> query(String sql,RowMapper rm,Object... param){
List<T> list=new ArrayList<T>();
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
conn = JDBCUitl.getConnection();
ps = conn.prepareStatement(sql);
setParams(ps, param);
rs = ps.executeQuery();
while(rs.next()){
T t=(T) rm.rowMapper(rs);
list.add(t);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
JDBCUitl.close(conn, ps, rs);
}
return list;
}
测试:
BaseDao<Score> baseDao=new BaseDao<Score>();
String sql="select m.mname,c.cname,s.score from score s join member m on s.mid=m.mid join course c on c.cid=s.cid";
List<Score> list=baseDao.queryAll(sql, new ScoreRowMapper());
for(Score d:list){
System.out.println(d.toString());
}
控制台输出如下: