Commons DbUtils est une bibliothèque d'outils open source fournie par l'organisation Apache pour l'encapsulation simple de JDBC. Son utilisation peut simplifier le développement d'applications JDBC sans affecter les performances du programme.
Utilisation de DBUtils
- 1. Qu'est-ce que DBUtils?
- Deuxièmement, les trois objets principaux de DBUtils
- Troisièmement, la simple utilisation de DBUtils
- Quatre, objet QueryRunner
- Cinq, interface ResultSetHandler
- Six, développement de transactions DBUtils
- Sept, code spécifique C3P0Util.java et C3P0-config.xml (sélectionnez pour voir)
1. Qu'est-ce que DBUtils?
1. Introduction
a. dbUtils est un Java fonctionnent une base de données de l' outil emballé , la base de données peut être simple et rapide à utiliser
b. Pour une opération de lecture de la base de données, l'ensemble des résultats peut être emballé dans ResultSet List
, Set
, Array
comme Java set
c. Pour une opération d'écriture, tant que les instructions SQL d'écriture ;
d Peut utiliser des sources de données, JBDI
2. Fonction
DBUtils encapsule les opérations JDBC, simplifie le processus et rend la programmation plus concise
Deuxièmement, les trois objets principaux de DBUtils
1. La classe QueryRunner
La méthode principale ::
query()
effectuer des opérations DQL
update()
: effectuer des opérations DML
batch()
: effectuer des opérations par lots
2. Interface ResultSetHandler
用于DQL操作后,封装查询的结果集
3. Classe DBUtils
是一个工具类,定义了关闭资源和事务处理的方法
Troisièmement, la simple utilisation de DBUtils
- Importez des packages jar, utilisez la base de données MySQL, C3P0, DBUtils, importez au moins ces trois packages jar
- La création d' un objet QueryRunner nécessite une source de données
//创建一个 QueryRunner 对象,括号里面需要一个数据源,在另外的包创建
QueryRunner runner = new QueryRunner(C3P0Util.getDataSource());
Le fichier de source de données est illustré dans la figure ci-dessous, les codes spécifiques de C3P0Util.java et C3P0-config.xml sont répertoriés à la fin de l'article
- Définir l' instruction SQL
//定义SQL语句,比如查询学生表的全部信息
String sql = "select * from student";
- Lorsque vous utilisez DQL, utilisez ArrayListHandler () pour encapsuler l'ensemble de résultats
//执行sql语句并封装查询结果
List<Object[]> objectList = runner.query(sql, new ArrayListHandler());
- Enfin, utilisez la méthode close () de DBUtils pour libérer des ressources
Quatre, objet QueryRunner
1. Constructeur
new QueryRunner():事务可以自己控制
也就是说,这个对象调用的方法(query、update、batch)的参数中都需要Connection 对象
2. Méthodes courantes
-
requête: (Les exemples spécifiques sont décrits ci-dessous )
ArrayHandler
: Appropriés multi-colonnes rangée conditions
ArrayListHandler
: pour les lignes et les colonnes
ColumnListHandler
: Utilisation seule ligne polycyclique
KeyedHandler
: aller pour une pluralité d'enregistrements de chaque paquet à la carte , la carte puis encapsulé dans une autre carte à valeur clé pour le domaine spécifié
MapHandler
: apte à prendre une ligne de données, les noms d'attributs et des valeurs pour chaque ligne de données est encapsulé dans la carte de
MapListHandler
: pour prendre une pluralité d'enregistrements, enregistre le paquet à la carte , alors la carte encapsulée Liste de
ScalaHandler
: pour prendre des simples séparés données
BeanHandler
pour: lire une rangée de données, et encapsulé dans un objet spécifié dans
BeanListHandler
: pour lire une pluralité de lignes de données, et l'objet spécifié à l'emballage, et ajouté à l'ensemble -
mettre à jour
Insérer: ajouter des données
@Test
public void testInsert() throws SQLException{
//1. 得到一个QueryRunner对象
QueryRunner runner = new QueryRunner(C3P0Util.getConnection());
//2. 定义SQL语句
String sql = "insert into stu value(?,?,?,?)";
//3.定义一个参数数组
Object[] params = {"1","花无缺",27,"男"}
//4. 执行DML操作
int count = runner.update(conn,sql,params);
}
Mettre à jour: modifier les données
@Test
public viod testUpdate() throws SQLException{
QueryRunner runner = new QueryRunner(C3P0Util.getConnection());
String sql = "update ste set s_name=?,where s_id=?";
Object[] params = {"叶孤城","13"};
int count = runner.update(sql,params);
}
Supprimer: supprimer des données
@Test
public viod testDelete() throws SQLException{
QueryRunner runner = new QueryRunner(C3P0Util.getConnection());
String sql = "delete from stu where sid=?";
Object[] params = {"13"};
int count = runner.delete(sql,params);
}
- batch: opération batch
@Test
public void testBatch() throws SQLException{
//1. 得到一个QueryRunner对象
QueryRunner runner = new QueryRunner(C3P0Util.getConnection());
//2. 定义SQL语句
String sql = "insert into stu value(?,?,?,?)";
//3.定义一个参数数组
Object[] params = {
{"1","花无缺",27,"男"}
{"2","小鱼儿",27,"男"}
}
//4. 执行DML操作
int[] count = runner.batch(sql,params);
}
Cinq, interface ResultSetHandler
Il y a plusieurs façons, ce qui précède query
méthode on peut mentionner, l' utilisation sont similaires, sont les premiers à construire QueryRunner
un objet, défini les instructions SQL dans la mise en œuvre de la méthode, où un acte de classe, l'autre liste ne les
MapHandler
: Retirez la ligne de données, les noms d'attributs et les valeurs de chaque ligne de données encapsulées Carte de
@Test
public void testMap() throws SQLException{
//1. 得到一个QueryRunner对象
QueryRunner runner = new QueryRunner(C3P0Util.getConnection());
//2. 定义查询所有的SQL语句
String sql = "select * from stu where s_id=?";
//3.执行SQL语句,并封装查询结果
Map<String,Object> map = runner.query(sql,new MapHandler(),"13");
for(Map.Entry<string,Object> entry:map.entrySet()){
String key =entry.getKey();
Object value = entry.getValue();
System.out.println(key);
System.out.println(value);
}
}
Six, développement de transactions DBUtils
@Test
public void testInsert() throws SQLException{
//1. 得到一个QueryRunner对象
QueryRunner runner = new QueryRunner();
//2. 得到数据库的连接
Connection conn = C3P0Util.getConnection();
//设置事务不自动提交
conn.setAutoComit(false);
//3. 定义插入的SQL语句
String sql = "insert into stu value(?,?,?,?)";
//4.定义一个参数数组
Object[] params = {"1","花无缺",27,"男"}
//4. 执行DML操作
int count = runner.update(conn,sql,params);
try{
System.out.println(1/0);//假设让程序出错,使它事务回滚
conn.commit();//提交事务
System.out.println("插入数据"+(count == 1? "成功":"失败"));
}catch(Exception e){
e.prinltStackTrace();
conn.rollback();//回滚事务
System.out.println("事务回滚了...");
}
}
Sept, code spécifique C3P0Util.java et C3P0-config.xml (sélectionnez pour voir)
C3P0Util :
package cn.csdn.utils;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
/**
* 使用C3P0连接池得到数据库的连接对象
*
* @author 长歌
* @2020年4月22日下午4:21:31
*/
public class C3P0Util {
private C3P0Util() {
}
// C3P0得到数据源的方式
private static DataSource dataSource = new ComboPooledDataSource();
/**
* 返回数据源对象
*/
public static DataSource getDataSource() {
return dataSource;
}
/**
* 得到数据库的连接对象
*/
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException("创建数据库连接失败...");
}
}
/**
* 关闭数据库资源
* @param autoCloseables
*/
public static void close(AutoCloseable... autoCloseables) {
if (autoCloseables == null || autoCloseables.length == 0) {
return;
}
for (AutoCloseable autoCloseable : autoCloseables) {
if (autoCloseable == null) {
continue;
}
// 不关闭conn对象
if (autoCloseable.getClass() != Connection.class) {
try {
autoCloseable.close();
} catch (Exception e) {
System.err.println("关闭数据库资源失败:" + autoCloseable);
autoCloseable = null;
}
}
}
}
}
C3P0-config.xml :
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/csdn</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
</default-config>
</c3p0-config>