// 这个是在添加数据
@Test
public void demo1() {
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
String sql = "insert into Book values(?,?)";
try {
int num = qr.update(sql, 26, "明朝那些事");
if (num > 0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} // 修改数据
@Test
public void demo2() {
QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
try {
String sql = "update Book set bname=? where id=?";
int num = queryRunner.update(sql, "史记", 29);
if (num > 0) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} catch (Exception e) {
e.printStackTrace();
}
} // 下面的是查询语句
// 将数据表中的第一条数据封装成object
@Test
public void demo3() {
QueryRunner queryRunner = new QueryRunner(JDBCUtils.getDataSource());
try {
String sql = "select * from Book";
Object[] objects = queryRunner.query(sql, new ArrayHandler()); System.out.println(Arrays.toString(objects));
} catch (Exception e) {
e.printStackTrace();
}
} //将数据表中的每一条数据封装成object new ArrayListHandler()
@Test
public void demo4(){
QueryRunner queryRunner=new QueryRunner(JDBCUtils.getDataSource());
try {
String sql="select * from Book";
List<Object[]> list=queryRunner.query(sql,new ArrayListHandler()); for(Object[] objects:list){
System.out.println(Arrays.toString(objects));
} } catch (Exception e) {
e.printStackTrace();
}
} //把数据表中的第一条数据封装成JavaBean实体类对象 BeanHandler
@Test
public void demo5(){
QueryRunner queryRunner=new QueryRunner(JDBCUtils.getDataSource());
try {
String sql="select * from Book";
Book list=queryRunner.query(sql,new BeanHandler<>(Book.class)); System.out.println(list.toString());
} catch (Exception e) {
e.printStackTrace();
}
} //把数据表中的每一条数据封装成JavaBean实体类对象 BeanListHandler
@Test
public void demo6(){
QueryRunner queryRunner=new QueryRunner(JDBCUtils.getDataSource());
try {
String sql="select * from Book";
List<Book> list=queryRunner.query(sql,new BeanListHandler<>(Book.class)); for(Book book:list)
System.out.println(book.toString());
} catch (Exception e) {
e.printStackTrace();
}
} //把数据表中的第一条数据封装成Map集合 ,键:列名 值:该列的值 new MapHandler()
@Test
public void demo7(){
QueryRunner queryRunner=new QueryRunner(JDBCUtils.getDataSource());
try {
String sql="select * from Book";
Map<String,Object > map=queryRunner.query(sql,new MapHandler()); System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
}
} //把数据表中的每一条数据封装成Map集合 ,键:列名 值:该列的值 new MapListHandler()
@Test
public void demo8(){
QueryRunner queryRunner=new QueryRunner(JDBCUtils.getDataSource());
try {
String sql="select * from Book";
List<Map<String,Object >>list=queryRunner.query(sql,new MapListHandler());
for(Map<String,Object>map:list)
System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
}
} // ColunmListHandler: 把数据表中的没一条数据封装成 Map集合, 键:列名 值:该列的值 , 然后把每一行的Map集合装入到一个List集合中.
@Test
public void demo9() {
// 1. 获取可以执行SQL语句的对象: QueryRunner
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
// 2. 编写需要执行的SQL语句
String sql = "select * from Book;";
// 3. 执行SQL语句, 获取结果集
try {
List<Object> list = qr.query(sql, new ColumnListHandler("bname"));
System.out.println(list);
} catch (SQLException e) {
e.printStackTrace();
}
} // ScalarHandler: 把数据表中的没一条数据封装成 Map集合, 键:列名 值:该列的值 , 然后把每一行的Map集合装入到一个List集合中.
@Test
public void demo10() {
// 1. 获取可以执行SQL语句的对象: QueryRunner
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
// 2. 编写需要执行的SQL语句
String sql = "select count(*) from Book;";
// 3. 执行SQL语句, 获取结果集
try {
Object obj = qr.query(sql, new ScalarHandler());
System.out.println(obj);
} catch (SQLException e) {
e.printStackTrace();
}
} // KeyedHandler: 把数据表中的没一条数据封装成 Map集合, 键:列名 值:该列的值 , 然后把每一行的Map集合装入到一个List集合中.
@Test
public void demo11() {
// 1. 获取可以执行SQL语句的对象: QueryRunner
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
// 2. 编写需要执行的SQL语句
String sql = "select * from Book;";
// 3. 执行SQL语句, 获取结果集
try {
Map<Object, Map<String, Object>> map = qr.query(sql, new KeyedHandler("bname"));
for (Object key : map.keySet()) {
System.out.println(key + "..." + map.get(key));
} } catch (SQLException e) {
e.printStackTrace();
}
}

数据库连接池之_DButils的更多相关文章

  1. Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池

    连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...

  2. .数据库连接池技术:DBCP和C3P0

    数据库连接池技术:DBCP和C3P0 1.什么是数据库连接池 已知的方法是需要访问数据库的时候进行一次数据库的连接,对数据库操作完之后再释放这个连接,通常这样业务是缺点很明显的: 用户每次请求都需要向 ...

  3. [转]阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  4. 数据库连接池c3p0学习

    这里只记录c3p0的数据源,不会涉及到其它方面和别的数据库连接池的对比 配置文件主要的实现方式有三种: 1.手写代码去加载一个配置文件 创建一个config.properties文件如下: drive ...

  5. <十四>JDBC_c3p0数据库连接池

    配置文件:c3p0-config.xml <!-- Hibernate官方推荐使用的数据库连接池即c3p0;dbcp是Tomcat在数据源中使用 --><c3p0-config> ...

  6. <十三>JDBC_dbcp数据库连接池

    配置文件:jdbc.properties username=rootpassword=kkdriverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://1 ...

  7. c3p0数据库连接池的使用详解

    首先,什么是c3p0?下面是百度百科的解释: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Sp ...

  8. Mybatis-update - 数据库死锁 - 获取数据库连接池等待

    最近学习测试mybatis,单个增删改查都没问题,最后使用mvn test的时候发现了几个问题: update失败,原因是数据库死锁 select等待,原因是connection连接池被用光了,需要等 ...

  9. 从零开始学 Java - 数据库连接池的选择 Druid

    我先说说数据库连接 数据库大家都不陌生,从名字就能看出来它是「存放数据的仓库」,那我们怎么去「仓库」取东西呢?当然需要钥匙啦!这就是我们的数据库用户名.密码了,然后我们就可以打开门去任意的存取东西了. ...

随机推荐

  1. nuklear(A single-header ANSI C gui library,界面还不错)

    Nuklear This is a minimal state immediate mode graphical user interface toolkit written in ANSI C an ...

  2. SecureCRT连接虚拟机中的Linux

    如何使用SecureCRT连接虚拟机中的Linux https://jingyan.baidu.com/article/574c52191eb9996c8c9dc16a.html?st=5&n ...

  3. cordova通过指纹插件进行指纹验证

    原文:cordova通过指纹插件进行指纹验证 版权声明:本文为博主原创文章,转载须注明出处,博客地址:https://blog.csdn.net/wx13227855087 https://blog. ...

  4. [Android]使用ViewPager实现图片滑动展示

    在淘宝等电商的APP首页经常能看到大幅的广告位,通常有多幅经常更新的图片用于展示促销信息,如下图所示: 通常会自动滚动,也可以根据手势滑动.我没有研究过人家的APP是通过什么实现的,可能有第三方已经封 ...

  5. MinGW开发工具的安装(还有visual-mingw)

    MinGW是Minimalist GNU for Windows的缩写,是把linux下的GNU开发工具包移植到windows的项目之一.和Cygwin不一样的是,MinGW不提供linux的posi ...

  6. win10 uwp 线程池

    原文:win10 uwp 线程池 如果大家有开发 WPF 或以前的程序,大概知道线程池不是 UWP 创造的,实际上在很多技术都用到线程池. 为什么需要线程池,他是什么?如何在 UWP 使用线程池,本文 ...

  7. PCI GXL学习之再造篇

    作者:朱金灿 来源:http://blog.csdn.net/clever101 再造一个PCI GXL?听起来是一件颇有难度的事,实际上并非不可能.本文拟从必要性.可行性和技术路线等方面谈谈再造PC ...

  8. smarty循环

    1. 功能说明,在页面使用smarty循环100次输出,类似for循环100次{section name=total loop=100}{$smarty.section.total.index+1} ...

  9. DELPHI高性能大容量SOCKET并发(八):断点续传(上传也可以续传)

    断点续传 断点续传主要是用在上传或下载文件,一般做法是开始上传的时候,服务器返回上次已经上传的大小,如果上传完成,则返回-1:下载开始的时候,由客户端上报本地已经下载大小,服务器根据位置信息下发数据, ...

  10. yii2.0表单《《提交》》变量设置

    public $enableCsrfValidation = false;