模仿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;}
阅读全文
0 0
- 模仿QueryRunner的底层实现
- 自己实现一个ArrayList,模仿ArrayList类的底层结构
- 超级数组,list底层实现模仿
- 数据库中的QueryRunner的大致实现
- DBUtiles中的简单使用(QueryRunner和ResultSetHandler的手动实现)
- JDBC增删改基于QueryRunner 或 PreparedStatement的实现
- QueryRunner的使用
- QueryRunner的使用
- QueryRunner的使用
- QueryRunner的使用
- QueryRunner的使用
- QueryRunner的使用
- QueryRunner 的Handler
- QueryRunner的使用
- 【转】QueryRunner的使用
- 关于QueryRunner的使用
- Queryrunner类的使用
- QueryRunner
- 因配置不对,导致出现The requested resource is not available的解决方法
- PHP源码之数组的内部实现
- js 中getAttribute和setAttribute属性
- Mysql单机多实例搭建说明
- [sicily] 1002. 等价二叉树
- 模仿QueryRunner的底层实现
- OpenCV自学笔记2:访问图像数据
- 电脑耳机只能听到伴奏原声声音很小该怎么办?
- java获取工程目录下面或者引用jar包中的配置文件方式:
- 创建React Component的几种方式
- OPenGl编程宝典在vs2010中配置
- BZOJ 3994 [SDOI2015]约数个数和
- 给定一个字符串,你需要颠倒一个句子中每个单词中的字符顺序,同时保留空格和初始单词顺序。
- FreeRTOS实验_独立看门狗监视多线程