import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.util.ArrayList;import java.util.List;publicfinalclassBaseDaoextendsBaseConfig{//创建执行对象private PreparedStatement getPst(Connection con, String sql, Object... params)throws SQLException {//将sql查询语句拆分成字符串数组//通过连接对象获得执行对象
PreparedStatement pst = con.prepareStatement(sql);//由第三个参数获取sql语句的参数if(params.length >0){for(int i =0; i < params.length; i++){
pst.setObject(i +1, params[i]);//params:动态参数}}return pst;}public Result exeNonQuery(String sql, Object... params){
Connection con = null;
PreparedStatement pst = null;try{
con =getCon();
pst =getPst(con, sql, params);return Result.succeed(pst.executeLargeUpdate());//int executeUpdate()//执行 DML,增删改的操作,返回影响的行数。//ResultSet executeQuery()// 执行 DQL,查询的操作,返回结果集}catch(SQLException e){
e.printStackTrace();return Result.fail();}finally{close(pst, con);}}public Result exeQuery(String sql, Object... params){
Connection con = null;
PreparedStatement pst = null;
ResultSet rst = null;try{
con =getCon();//获取执行器,里面有连接信息,sql语句,以及sql语句的参数
pst =getPst(con, sql, params);//使用执行对象执行sql语句,得到结果集
rst = pst.executeQuery();//存放结果集
List<List<String>> data =newArrayList<>();//判断查询是否成功,并产生结果集if(null != rst && rst.next()){/**
* 通过挂在结果集上的表结构信息获取获取行数
* getMetaData()获取表结构信息
* 因为每次查询的结过行数不会变化,定义为常量
*/finalint CC = rst.getMetaData().getColumnCount();//外层循环提取行do{//创建数组时指定行数,优化数组的计算效率
List<String> row =newArrayList<>(CC);//内层循环提取列for(int i =1; i <= CC; i++){//行内添加列
row.add(rst.getObject(i).toString());}//表内添行
data.add(row);}while(rst.next());}//查询成功,返回结果集return Result.succeed(data);}catch(SQLException e){//查询失败,调用Redult类的fail方法返回nullreturn Result.fail();}finally{close(rst, pst, con);}}}
1.3、Result类
publicfinalclassResult<T>{privateboolean err;//错误属性,当当前属性值为true时,表示最终结果有问题private T data;//数据属性:结果publicstatic<T> Result succeed(T data){//通过构造方法创建结果对象,并返回结果returnnewResult(false, data);//错误属性位假,则查询结果通过,输出结果}publicstatic Result fail(){//通过构造方法创建结果对象,并返回结果returnnewResult(true, null);//错误属性为真,则查询结果不通过,无结果}//构造方法privateResult(boolean err, T data){this.err = err;this.data = data;}publicbooleanisErr(){return err;}public T getData(){return data;}}