Démarrage rapide pour DBUtils

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.

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, Arraycomme 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

  1. Importez des packages jar, utilisez la base de données MySQL, C3P0, DBUtils, importez au moins ces trois packages jar
  2. 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

  1. Définir l' instruction SQL
//定义SQL语句,比如查询学生表的全部信息
String sql = "select * from student";
  1. Lorsque vous utilisez DQL, utilisez ArrayListHandler () pour encapsuler l'ensemble de résultats
//执行sql语句并封装查询结果
List<Object[]> objectList = runner.query(sql, new ArrayListHandler());
  1. 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
  1. 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
    BeanHandlerpour: 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

  2. 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);
}
  1. 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 querymé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>
Publié 10 articles originaux · gagné 8 · visité 2197

Je suppose que tu aimes

Origine blog.csdn.net/tanghaixu/article/details/105682623
conseillé
Classement