博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DBUtils原理及基本使用
阅读量:2063 次
发布时间:2019-04-29

本文共 3724 字,大约阅读时间需要 12 分钟。

首先我们通过一个基本的演示来了解一下DBUtils的基本原理

public class UseDButils {	public static void main(String[] args) {				/*addUser(new User("weijinhao","123456"));		quary("weijinhao");*/	}	public static  void addUser(User user) {		ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();		QR qr = new QR(comboPooledDataSource);		String sql = "insert into users values(?,?)";		Object[] para = {user.getUsername(),user.getPassword()};		qr.update(sql, para);	}	public static void quary(String username) {		ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();		QR
qr = new QR
(comboPooledDataSource); String sql = "select * from users where username = ?"; Object[] para = {username}; User user = (User) qr.quary(new QRHandler
() { //我们在这使用的是匿名内部类 public User handler(ResultSet rs) { User user = new User(); try { rs.next(); user.setUsername(rs.getString(1)); user.setPassword(rs.getString(2)); } catch (SQLException e) { e.printStackTrace(); } return user; } }, sql,para); System.out.println(user); }}

/** *  * 我们用这个类来模拟一下DBUtils类的结构,麻雀虽小五脏俱全 *  */public class QR
{ private DataSource ds; public QR() { super(); } public QR(DataSource ds) { super(); this.ds = ds; } /* * 给出sql和object[]来实现增删改查 */ public void update(String sql ,Object...objects) { Connection con = null; PreparedStatement ps = null; try{ con = ds.getConnection(); ps = con.prepareStatement(sql); init(ps,objects); //我们调用该函数来进行prepareStatement的初始化 ps.executeUpdate(); }catch(SQLException s){ s.printStackTrace(); }finally{ try { ps.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } /* * QRHandler
用该对象来进行表数据到对像属性的映射,其实在DBUtils中不用我们自己写该接口的实现类,有写好的可以直接使用 * sql为要查询的语句 * */ public T quary(QRHandler
hd, String sql ,Object...objects) { Connection con = null; PreparedStatement ps = null; T user = null; try{ con = ds.getConnection(); ps = con.prepareStatement(sql); init(ps,objects); ResultSet rs = ps.executeQuery(); user = hd.handler(rs); //用该对象来进行表数据到对像属性的映射 }catch (SQLException e) { e.printStackTrace(); }finally { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } try { con.close(); } catch (SQLException e) { e.printStackTrace(); } return user; } } void init(PreparedStatement ps,Object...objects) { for(int i = 0;i < objects.length;i++) { try { ps.setObject(i + 1, objects[i]); } catch (SQLException e) { e.printStackTrace(); } } }}
public interface QRHandler
{ T handler(ResultSet rs) ;}
好了,如果看懂了上面的源码,那你就算是基本会了DBUtils的使用了。

让我们来看一下DBUtils类的使用源码:

public class UseDBUtils {	public static void main(String[] args) throws SQLException {		//update();		//query();	}	public static void query() throws SQLException {		ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();		QueryRunner qr = new QueryRunner(comboPooledDataSource);		String sql = "select * from users where username=?";		BeanHandler
rsh = new BeanHandler
(User.class);//关于结构集处理器有好几中,还可以自己实现自己的结构集处理器 User user = qr.query(sql, rsh, "zhoufeifei"); System.out.println(user); } public static void update() throws SQLException { ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource(); QueryRunner qr = new QueryRunner(comboPooledDataSource); String sql = "insert into users values(?,?)"; Object[] params = {"zhoufeifei" , "123456"}; int i = qr.update(sql, params); System.out.println(i); }}

转载地址:http://euelf.baihongyu.com/

你可能感兴趣的文章
深入理解 Linux Cgroup 系列(三):内存
查看>>
7月最新Java微服务资料
查看>>
Linux 指令
查看>>
wi10优化
查看>>
windows console 颜色设置
查看>>
VC unicode下Cstring转char*
查看>>
MFC ListBox使用
查看>>
Linux 使用grep筛选多个条件
查看>>
H264 NALU分析(sps,pps,关键帧,非关键帧)
查看>>
Windows文本加载wscite的使用
查看>>
浏览器主页被篡改修复
查看>>
FFmpeg - 新老接口对比问题
查看>>
Windows下MinGW编译ffmpeg库
查看>>
SDL在windows下使用 - 显示YUV
查看>>
三种方式YUV420转RGB24/BGR24,实测可用
查看>>
Windows下使用VS2015编译openssl库
查看>>
Win10+VS2015编译libcurl
查看>>
Windows下使用jsoncpp
查看>>
Ubuntu下测试使用Nginx+uWsgi+Django
查看>>
Windows下编译x264
查看>>