模仿QueryRunner的底层实现

来源:互联网 发布:手机版电子杂志软件 编辑:程序博客网 时间:2024/05/20 14:39
package cn.xiechengxu.dbutils;import javax.sql.DataSource;import java.sql.*;/** * Created by zhangqiang on 17/6/23. */public class MyQueryRunner {    private DataSource ds;    public MyQueryRunner() {    }    public MyQueryRunner(DataSource ds){        this.ds=ds;    }    public <T> T query(Connection con,String sql ,MyResultSetHandler<T> mrs, Object ...params) throws SQLException {        PreparedStatement pst=con.prepareStatement(sql);        ParameterMetaData pmd=pst.getParameterMetaData();        int count=pmd.getParameterCount();        for(int i=1;i<=count;i++){            pst.setObject(i,params[i-1]);        }        ResultSet rs=pst.executeQuery();//得到结果集,要将结果集封装成用户想要的对象,但是,工具不知道用户需求        return mrs.handle(rs);    }    public int update(Connection con,String sql , Object ...params) throws SQLException {        PreparedStatement pst=con.prepareStatement(sql);        ParameterMetaData pmd=pst.getParameterMetaData();        int count=pmd.getParameterCount();        for(int i=1;i<=count;i++){            pst.setObject(i,params[i-1]);        }        int row= pst.executeUpdate();        //关闭资源        pst.close();        return row;    }    public int update(String sql , Object ...params) throws SQLException {        Connection con=ds.getConnection();        PreparedStatement pst=con.prepareStatement(sql);        ParameterMetaData pmd=pst.getParameterMetaData();        int count=pmd.getParameterCount();        for(int i=1;i<=count;i++){            pst.setObject(i,params[i-1]);        }        int row= pst.executeUpdate();        //关闭资源        pst.close();        con.close();        return row;    }}
package cn.xiechengxu.dbutils.domain;import cn.xiechengxu.dbutils.MyQueryRunner;import cn.xiechengxu.dbutils.MyResultSetHandler;import cn.xiechengxu.utils.DataSourceUtils;import org.junit.Test;import java.sql.ResultSet;import java.sql.SQLException;/** * Created by zhangqiang on 17/6/23. */public class MyQueryRunnerTest {    @Test    public void updateTest() throws SQLException{        String sql="delete from account where id=?";        MyQueryRunner mqr=new MyQueryRunner();        mqr.update(DataSourceUtils.getConnection(),sql,3);    }    @Test    public void selectTest() throws SQLException {        String sql="select * from account where id=?";        MyQueryRunner mqr=new MyQueryRunner();       Account a=mqr.query(DataSourceUtils.getConnection(), sql, new MyResultSetHandler<Account>() {            @Override            public Account handle(ResultSet rs) throws SQLException {                Account a=null;                if(rs.next()){                    a=new Account();                    a.setId(rs.getInt("id"));                    a.setName(rs.getString("name"));                    a.setMoney(rs.getDouble("money"));                }                return a;            }        }, 2);       System.out.print(a);    }}
public interface MyResultSetHandler<T> {    public T handle(ResultSet rs)throws SQLException;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 发票系统导出的xml怎么办 微信支付被限制怎么办 跨行三天不到账怎么办 测速正常但实际很慢怎么办 善领wifi上网慢怎么办 文件太大拷贝不到u盘怎么办 电脑的视频文件不显示缩略图怎么办 无线网连接不上怎么办 路由器wifi密码忘了怎么办 路由器账号密码忘了怎么办 刷卡刷多了钱怎么办 刷卡刷了两次钱怎么办 小米手机强刷后一联网就被锁怎么办 苹果刷机出现的问题怎么办 小米手机解不开图案锁怎么办 小米6无限重启怎么办 小米5一直显示mi怎么办 小米手机电池进入休眠状态怎么办 小米3s开不开机怎么办 小米n充电关机开机不了怎么办? 关机后强制刷机怎么办 红米手机开机画面怎么办 红米note1无法清理数据怎么办 红米2a密码忘记怎么办 线刷也不成功该怎么办 红米2开不了机怎么办 魅族无限重启怎么办 坚果pro无法双清怎么办 usb外置网卡网速慢怎么办? 无线路由器被改密码怎么办 电脑打不开flv格式的视频怎么办 电脑打不开pdf格式的文件怎么办 pdf格式在电脑上打不开怎么办 zip压缩的时候空间不足怎么办 电子发票填抬头错了怎么办 发票写错一个字怎么办 普票税率开错了怎么办 税率开错为17了怎么办 电子发票抬头错了怎么办 发票抬头错了一个字怎么办 5月税率开错了怎么办