数据库基础_JDBC[5]_Dbutil以及一个简单的数据库存储过程

DButil

1.什么是DButil
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc
编码的工作量,同时也不会影响程序的性能

2.DButil常用的方法以及功能
DbUtils :提供如关闭连接、装载JDBC驱动程序等常规工作的工具类,里面的所有方法都是静态的。主要方法如下:
(1).public static void close(…) throws java.sql.SQLException:DbUtils类提供了三个重载的关闭方法。这些方法检查所提供的参数是不是
NULL,如果不是的话,它们就关闭Connection、Statement和ResultSet。
(2).public static void closeQuietly(…): 这一类方法不仅能在Connection、Statement和ResultSet为NULL情况下避免关闭,还能隐藏一些在程序
中抛出的SQLEeception。
(3).public static void commitAndCloseQuietly(Connection conn): 用来提交连接,然后关闭连接,并且在关闭连接时不抛出SQL异常。
(4).public static boolean loadDriver(java.lang.String driverClassName):这一方装载并注册JDBC驱动程序,如果成功就返回true。
使用该方法,你不需要捕捉这个异常ClassNotFoundException。

3.相关的方法测试

/**
* ScalarHandler: 把结果集转为一个数值(可以是任意基本数据类型和字符串, Date 等)返回
*/
@Test
public void testScalarHandler(){
Connection connection = null;

try {
connection = JDBCTools.getConnection();
String sql = "SELECT name, email " +
"FROM customers";

Object result = queryRunner.query(connection,
sql, new ScalarHandler());

System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, connection);
}
}

/**
* MapListHandler: 将结果集转为一个 Map 的 List
* Map 对应查询的一条记录: 键: SQL 查询的列名(不是列的别名), 值: 列的值.
* 而 MapListHandler: 返回的多条记录对应的 Map 的集合.
*/
@Test
public void testMapListHandler(){
Connection connection = null;

try {
connection = JDBCTools.getConnection();
String sql = "SELECT id, name, email, birth " +
"FROM customers";

List<Map<String, Object>> result = queryRunner.query(connection,
sql, new MapListHandler());

System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, connection);
}
}

/**
* MapHandler: 返回 SQL 对应的第一条记录对应的 Map 对象.
* 键: SQL 查询的列名(不是列的别名), 值: 列的值.
*/
@Test
public void testMapHandler(){
Connection connection = null;

try {
connection = JDBCTools.getConnection();
String sql = "SELECT id, name, email, birth " +
"FROM customers";

Map<String, Object> result = queryRunner.query(connection,
sql, new MapHandler());

System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, connection);
}
}

/**
* BeanListHandler: 把结果集转为一个 List, 该 List 不为 null, 但可能为
* 空集合(size() 方法返回 0)
* 若 SQL 语句的确能够查询到记录, List 中存放创建 BeanListHandler 传入的 Class
* 对象对应的对象.
*/
@Test
public void testBeanListHandler(){
Connection connection = null;

try {
connection = JDBCTools.getConnection();
String sql = "SELECT id, name, email, birth " +
"FROM customers";

List<Customer> customers = queryRunner.query(connection,
sql, new BeanListHandler(Customer.class));

System.out.println(customers);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, connection);
}
}

/**
* BeanHandler: 把结果集的第一条记录转为创建 BeanHandler 对象时传入的 Class
* 参数对应的对象.
*/
@Test
public void testBeanHanlder(){
Connection connection = null;

try {
connection = JDBCTools.getConnection();
String sql = "SELECT id, name customerName, email, birth " +
"FROM customers WHERE id >= ?";

Customer customer = queryRunner.query(connection,
sql, new BeanHandler(Customer.class), 5);

System.out.println(customer);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, connection);
}
}

QueryRunner queryRunner = new QueryRunner();

class MyResultSetHandler implements ResultSetHandler{

@Override
public Object handle(ResultSet resultSet)
throws SQLException {
// System.out.println("handle....");
// return "atguigu";

List<Customer> customers = new ArrayList<>();

while(resultSet.next()){
Integer id = resultSet.getInt(1);
String name = resultSet.getString(2);
String email = resultSet.getString(3);
Date birth = resultSet.getDate(4);

Customer customer =
new Customer(id, name, email, birth);
customers.add(customer);
}

return customers;
}

}

/**
* QueryRunner 的 query 方法的返回值取决于其 ResultSetHandler 参数的
* handle 方法的返回值
*
*/
@Test
public void testQuery(){
Connection connection = null;

try {
connection = JDBCTools.getConnection();
String sql = "SELECT id, name, email, birth " +
"FROM customers";
Object obj = queryRunner.query(connection, sql,
new MyResultSetHandler());

System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, connection);
}
}

@Test
public void testUpdate(){
Connection connection = null;

try {
connection = JDBCTools.getConnection();
String sql = "UPDATE customers SET name = ? " +
"WHERE id = ?";
queryRunner.update(connection, sql, "MIKE", 11);
} catch (Exception e) {
e.printStackTrace();
} finally{
JDBCTools.releaseDB(null, null, connection);
}
}

JDBC_存储过程

/**
* 如何使用 JDBC 调用存储在数据库中的函数或存储过程
*/
@Test
public void testCallableStatment() {

Connection connection = null;
CallableStatement callableStatement = null;

try {
connection = JDBCTools.getConnection();

// 1. 通过 Connection 对象的 prepareCall()
// 方法创建一个 CallableStatement 对象的实例.
// 在使用 Connection 对象的 preparedCall() 方法时,
// 需要传入一个 String 类型的字符串, 该字符串用于指明如何调用存储过程.
String sql = "{?= call sum_salary(?, ?)}";
callableStatement = connection.prepareCall(sql);

// 2. 通过 CallableStatement 对象的
//reisterOutParameter() 方法注册 OUT 参数.
callableStatement.registerOutParameter(1, Types.NUMERIC);
callableStatement.registerOutParameter(3, Types.NUMERIC);

// 3. 通过 CallableStatement 对象的 setXxx() 方法设定 IN 或 IN OUT 参数. 若想将参数默认值设为
// null, 可以使用 setNull() 方法.
callableStatement.setInt(2, 80);

// 4. 通过 CallableStatement 对象的 execute() 方法执行存储过程
callableStatement.execute();

// 5. 如果所调用的是带返回参数的存储过程,
//还需要通过 CallableStatement 对象的 getXxx() 方法获取其返回值.
double sumSalary = callableStatement.getDouble(1);
long empCount = callableStatement.getLong(3);

System.out.println(sumSalary);
System.out.println(empCount);

} catch (Exception e) {
e.printStackTrace();
} finally {
JDBCTools.releaseDB(null, callableStatement, connection);
}

}

原文地址:https://www.cnblogs.com/nwxayyf/p/9867030.html

时间: 2024-08-10 19:49:39

数据库基础_JDBC[5]_Dbutil以及一个简单的数据库存储过程的相关文章

PHP实现的一个简单的数据库操作类

PHP实现的一个简单的数据库操作类 实现的功能: - 在实例化的时候能设置连接字符集 - 在实例化的时候能连接数据库 - 在实例化的时候能选择默认数据库 - 销毁对象时关闭数据库 代码如下: <?php // 数据库操作类MySQLDB class MySQLDB { // 声明属性 private $server; private $username; private $password; public $default_db; public $link; // 声明构造函数 public f

PHP实现的一个简单的数据库操作类(修改版)

PHP实现的一个简单的数据库操作类 实现的功能: - 在实例化的时候能设置连接字符集 - 在实例化的时候能连接数据库 - 在实例化的时候能选择默认数据库 - 销毁对象时关闭数据库 代码如下: <?php // 数据库操作类MySQLDB class MySQLDB { // 声明属性 private $server; private $port; private $username; private $password; public $default_db; private $charset;

Vue2.0基础学习(3)--- 一个简单的实例学习

看完vue 的官方文档,再做一个简单的实例是最好不过了,既能巩固我们所学的知识,又能学以致用.infoq上推荐了一篇文章,面向重度 jQuery 开发者的 Vue.js 介绍, 它是老外写的,用vue做了一个简单的实例,非常适合学完vue文档来练练手,我这里并没有翻译文档,而是做了几次后,自已的思路. 首先看一下这个实例长什么样子,有什么功能 上面是一个文本框,用于输入内容,但最多只能输入140个字,所以右下角会有字数提示.当用户进行输入的时候,右下角的数字不断变化,提示用户还剩多少字可以输入.

【Java基础】用LinkedList实现一个简单栈的功能

栈的基本功能 栈的最基本功能是保障后进先出,然后在此基础上可以对在栈中的对象进行弹入弹出,此外,在弹出时,如果栈为空,则会报错,所以还需要提供获取当前栈大小的方法. 构造存储对象Student /** * Created by lili on 15/11/14. */ public class Student { private String name; private int age; public Student() { } public Student(String name, int a

帮旭哥写作业_入门级:一个简单的数据库管理系统

2015-5-11 帮兄弟写的一个专业课的作业.第一次写这样的系统. 目标: 0)有用户界面的一个客户端 1)注册.登录功能 2)登录后,能增.删.改.查相应数据库的数据 登录后的界面大概长这个样子(学长版): 先记录下我理解的传统的C/S模型(暂时粗浅的理解,不一定完全准确): 为什么要有服务器端,而不是只有客户端和数据库,即为什么不把对数据的操作也放在客户端呢? 1)全放在客户端的话,可以反汇编,数据时怎么得到的就都知道了,不太安全. 2)服务器端有一个,客户端可以有多个,这样就能通过服务器

nodejs基础 用http模块 搭建一个简单的web服务器 响应纯文本

首先说一下,我们平时在浏览器上访问网页,所看到的内容,其实是web服务器传过来的,比如我们访问www.baidu.com.当我们在浏览器地址栏输入之后,浏览器会发送请求到web服务器,然后web服务器根据请求所携带的信息,返回内容. 那么,nodejs中的http模块,就是用来搭建web服务器用的. 下面来简单的搭建一个服务器: var http = require("http"); //request:是请求参数,携带这请求所带来的信息.response:是响应参数,携带者将要返回到

快速添加一个简单的数据库

//示例建表 create table msg ( id int auto_increment primary key, title varchar(200), content varchar(200), pubtime int ) charset utf8; //数据 set names utf8; insert into msg1 (id,title,content,pubtime) values (1,'很好','天气很好',123124522); insert into msg1 (id

mysql5.7基础 create database...charset=... 创建一个新的数据库并指定它的字符编码

礼悟:    公恒学思合行悟,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼养身心,诚劝且行且珍惜. 数据.数据,命根就在数据.操作数据库一定要谨慎小心.给最苦 这里的代码,看看就好,要有自己的判断.遇到抉择,要不耻上下问. mysql:5.7                     os:Windows7 x64 代码及效果 mysql> create database newDB charset=utf8; Query OK, 1

一个简单的数据库备份

#!/bin/bash mysqlpasswd= mysql -uroot -p$mysqlpasswd -e "show databases;"  2>/dev/null  > /home/hehe/databases.txt for i in `cat /home/hehe/databases.txt` do mysqldump -uroot -p$mysqlpasswd $i > /home/hehe/${i}_`date +%Y-%m-%d-%H-%M`.sq