刚刚,改造了下BaseDao……
作者:互联网
今天在上课的时候,带着学生们写底层的jdbc连接数据库并且对数据表进行增删改查,写的那就一个痛苦啊……
从创建实体类到写Dao层代码再到表现层的Jsp页面, 写了好久好久……
终于写完了!!!
其实吧,主要还是DaoImpl层的代码写的太多,代码过于臃肿,反而BaseDao这个“工具类”却写的一点点。
于是,这不刚刚就把这个BaseDao改进了一下,将凡是公共可以共用的代码都提到了BaseDao中,DaoImpl层光写所需要实现的sql语句和对应的参数即可,剩下的任务由BaseDao去执行。
下面是BaseDao的代码:
package org.dao;
import java.sql.*;
import java.util.List;
import com.sun.org.glassfish.external.statistics.annotations.Reset;
/**
*
* @author 24519
* 连接数据库的工作类
*
*/
public class BaseDaoNew {
private Connection conn = null;
private PreparedStatement pre;
private ResultSet rs;
//连接数据库
public Connection getConn(){
try{
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//数据库连接字符串
String url
= "jdbc:mysql://localhost:3306/schooldb?user=root&password=root";
//连接数据库
conn = DriverManager.getConnection(url);
}catch(Exception ex){
ex.printStackTrace();
}
return conn;
}
//增删改
public int ExecuteUpdate(String sql,List params) throws SQLException{
int rel = 0;
conn = getConn();
pre = conn.prepareStatement(sql);
if(params!=null){
for(int i = 0;i<params.size();i++){
pre.setObject(i+1, params.get(i));
}
}
rel = pre.executeUpdate();
return rel;
}
//查询
public ResultSet ExecuteQuerty(String sql,List params) throws SQLException{
conn = getConn();
pre = conn.prepareStatement(sql);
if(params!=null){
for(int i = 0;i<params.size();i++){
pre.setObject(i+1, params.get(i));
}
}
return pre.executeQuery();
}
//关闭连接
public void closeConn(Connection conn,
PreparedStatement pre,ResultSet rs){
try {
if(rs!=null){
rs.close();
}
if(pre!=null){
pre.close();
}
if(conn!=null){
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
可以看得出来,我们将连接数据库,增删改、查询以及关闭连接都提取成独立的方法,在Impl层直接调用对应的是方法即可。
@Override
public Student login(String name, String pass,String info){
Student student = new Student();
String sql = "select * from student where sname = ? and spass = ?";
BaseDaoNew base1 = new BaseDaoNew();
List<Object> params = new ArrayList<Object>();
params.add(name);
params.add(pass);
try {
rs = base1.ExecuteQuerty(sql, params);
while(rs.next()){
student.setSid(rs.getInt(1));
student.setSname(rs.getString(2));
student.setSphone(rs.getString(3));
student.setSpass(rs.getString(4));
student.setSaddress(rs.getString(5));
student.setSage(rs.getInt(6));
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
base1.closeConn(conn, pre, rs);
}
return student;
点分享
点点赞
点在看
标签:11,刚刚,rs,改造,BaseDao,2020,student,String 来源: https://blog.51cto.com/u_12718584/2865774