Início rápido para DBUtils

O Commons DbUtils é uma biblioteca de ferramentas de código aberto fornecida pela organização Apache para o simples encapsulamento do JDBC, que pode simplificar o desenvolvimento de aplicativos JDBC sem afetar o desempenho do programa.

1. O que é DBUtils?

1. Introdução

a. dbUtils é um Java operar um banco de dados ferramenta embalados , o banco de dados pode ser simples e rápido para uso
b. Para uma operação de leitura da base de dados, o conjunto de resultados pode ser empacotado em ResultSet List, Set, Arraycomo Java conjunto
c. Para uma operação de gravação, enquanto as declarações de gravação SQL
d Pode usar fontes de dados, JBDI

2. Função

DBUtils encapsula operações JDBC, simplifica o processo e torna a programação mais concisa

Segundo, os três principais objetos do DBUtils

1. A classe QueryRunner

O método principal ::
query()executar operações DQL
update(): executar operações DML
batch(): executar operações em lote

2. Interface ResultSetHandler
用于DQL操作后,封装查询的结果集
3. classe DBUtils
是一个工具类,定义了关闭资源和事务处理的方法

Terceiro, o simples uso de DBUtils

  1. Importe pacotes jar, use o banco de dados MySQL, C3P0, DBUtils, importe pelo menos esses três pacotes jar
  2. Criar um objeto QueryRunner requer uma fonte de dados
//创建一个 QueryRunner 对象,括号里面需要一个数据源,在另外的包创建
QueryRunner runner = new QueryRunner(C3P0Util.getDataSource());

O arquivo da fonte de dados é mostrado na figura abaixo; os códigos específicos de C3P0Util.java e C3P0-config.xml estão listados no final do artigo.

  1. Definir instrução SQL
//定义SQL语句,比如查询学生表的全部信息
String sql = "select * from student";
  1. Ao usar o DQL, use ArrayListHandler () para encapsular o conjunto de resultados
//执行sql语句并封装查询结果
List<Object[]> objectList = runner.query(sql, new ArrayListHandler());
  1. Por fim, use o método close () do DBUtils para liberar recursos

Quatro, objeto QueryRunner

1. Construtor
new QueryRunner():事务可以自己控制
也就是说,这个对象调用的方法(query、update、batch)的参数中都需要Connection 对象
2. Métodos comuns
  1. consulta: (Os exemplos específicos são descritos abaixo )

    ArrayHandler: Adequados única fileira de várias colunas condições
    ArrayListHandler: para linhas e colunas
    ColumnListHandler : Indicado linha única policíclico
    KeyedHandler : ir para uma pluralidade de registos de cada pacote para o mapa , o Mapa então encapsulado em outro Mapa em, valor de chave para o campo especificado
    MapHandler: apropriado para tomar uma linha de dados, os nomes de atributo e valores para cada linha de dados é encapsulado em Mapa de
    MapListHandler: para tomar uma pluralidade de registos, regista o pacote para o mapa , o então Mapa encapsulado Lista de
    ScalaHandler: para tomar separadas individuais de dados
    BeanHandlerpara: ler uma linha de dados, e encapsulado num objecto especificado em
    BeanListHandler: para leitura de uma pluralidade de linhas de dados, e o objecto especificado para o pacote, e adicionado ao conjunto

  2. atualizar

Inserir: adicionar dados

@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);
}

Atualização: modificar os dados

@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);
}

Excluir: excluir dados

@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. lote: operação em lote
@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);
}

Cinco, interface ResultSetHandler

Há muitas maneiras, o acima querymétodo não são mencionados, o uso são semelhantes, são os primeiros a construir QueryRunner um objeto, instruções SQL definidos na implementação do método, em que um ato da classe, o outro não enumerá-los

MapHandler: Remova a linha de dados, os nomes de atributos e valores de cada linha de dados encapsulado Mapa 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);
	}
}

Seis, desenvolvimento de transações 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("事务回滚了...");
	}
}

Sete, código específico C3P0Util.java e C3P0-config.xml (selecione para ver)

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>
Publicado 10 artigos originais · ganhou 8 · visitado 2197

Acho que você gosta

Origin blog.csdn.net/tanghaixu/article/details/105682623
Recomendado
Clasificación