使用 dbutils 进行批处理
来源:互联网 发布:ncbi geo数据库 编辑:程序博客网 时间:2024/06/02 00:18
使用步骤
1、导入mysql-connector-java-5.1.37-bin 【此版本的驱动支持批处理】
2.需要在c3p0-config.xml中的 jdbcUrl参数【数据库URL】后面添加:
?rewriteBatchedStatements=true
3、调用QueryRunner的 batch方法
public int[] batch(Connection conn, String sql, Object[][] params) throws SQLException {}
需要传入 连接对象、要执行的SQL语句、要批量执行的SQL语句的二维数组
其中:
要批量执行的SQL语句的二维数组:
数组的第一维:数组的行号【从0开始】
数组的第二维:SQL语句占位符的参数,组成的数组
示例
【test数据库下的persons表】
CREATE TABLE persons(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL UNIQUE KEY,
age INT NOT NULL
);
mysql> DESC persons;+-------+--------------+------+-----+---------+----------------+| Field | Type | Null | Key | Default | Extra |+-------+--------------+------+-----+---------+----------------+| id | int(11) | NO | PRI | NULL | auto_increment || name | varchar(100) | NO | UNI | NULL | || age | int(11) | NO | | NULL | |+-------+--------------+------+-----+---------+----------------+
【c3p0-config.xml要注意的地方】
<property name="jdbcUrl">jdbc:mysql:///?rewriteBatchedStatements=true</property>
【Person(JavaBean)】
Integer id, String name, Integer age; 提供get、set方法 有参无参构造
【JDBCUtils】
提供公共的静态的获取连接和关闭连接的方法
【BaseDAO】
import java.sql.Connection;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import com.test.batch.utils.JDBCUtils;public class BaseDAO<T> { private QueryRunner qr = new QueryRunner(); /** * 批量增删改 * @param sql SQL语句 * @param params 要批量执行的SQL语句的二维数组 * <br />数组的第一维:数组的行号【从0开始】 * <br />数组的第二维:SQL语句占位符的参数,组成的数组 */ public void batchUpdate(String sql, Object[][] params) { Connection conn = null; try { conn = JDBCUtils.getConnection(); qr.batch(conn, sql, params); } catch (SQLException e) { e.printStackTrace(); } finally { JDBCUtils.closeConnection(conn); } }}
【PersonDAO】
public interface PersonDAO { /** * 批量添加用户 * * @param params * 要添加的用户的数组 */ void insert(Object[][] params); /** * 批量更新用户 * * @param params * 要更新的用户的数组 */ void update(Object[][] params); /** * 批量删除用户 * * @param params * 要删除的用户的数组 */ void delete(Object[][] params);}
【PersonDAOImpl】
public class PersonDAOImpl extends BaseDAO<Person> implements PersonDAO { @Override public void insert(Object[][] params) { String sql = "INSERT INTO test.persons VALUES(null, ?, ?)"; batchUpdate(sql, params); } @Override public void update(Object[][] params) { String sql = "UPDATE test.persons SET age = ? WHERE name = ?"; batchUpdate(sql, params); } @Override public void delete(Object[][] params) { String sql = "DELETE FROM test.persons WHERE name = ?"; batchUpdate(sql, params); }}
【PersonDaoImplTest】
public class PersonDAOImplTest { private PersonDAO dao = new PersonDAOImpl(); @Test public void testInsert() { Object[][] params = new Object[10][]; int len = params.length; // INSERT INTO test.persons VALUES(null, ?, ?) for (int i = 0; i < len; i++) { params[i] = new Object[] { "a" + i, i }; } dao.insert(params); /* * 查询表的所有记录 * +----+------+-----+ | id | name | age | +----+------+-----+ | 1 | a0 | 0 | | 2 | a1 | 1 | | 3 | a2 | 2 | | 4 | a3 | 3 | | 5 | a4 | 4 | | 6 | a5 | 5 | | 7 | a6 | 6 | | 8 | a7 | 7 | | 9 | a8 | 8 | | 10 | a9 | 9 | +----+------+-----+ */ } @Test public void testUpdate() { Object[][] params = new Object[5][]; int len = params.length; // UPDATE test.persons SET age = ? WHERE name = ? for (int i = 0; i < len; i++) { params[i] = new Object[] { 10, "a" + (i + 4) }; } dao.update(params); /* * 查询表的所有记录 * +----+------+-----+ | id | name | age | +----+------+-----+ | 1 | a0 | 0 | | 2 | a1 | 1 | | 3 | a2 | 2 | | 4 | a3 | 3 | | 5 | a4 | 10 | | 6 | a5 | 10 | | 7 | a6 | 10 | | 8 | a7 | 10 | | 9 | a8 | 10 | | 10 | a9 | 9 | +----+------+-----+ */ } @Test public void testDelete() { Object[][] params = new Object[6][]; int len = params.length; // DELETE FROM test.persons WHERE name = ? for (int i = 0; i < len; i++) { params[i] = new Object[] { "a" + (i + 3) }; } dao.delete(params); /* * 查询表的所有记录 * +----+------+-----+ | id | name | age | +----+------+-----+ | 1 | a0 | 0 | | 2 | a1 | 1 | | 3 | a2 | 2 | | 10 | a9 | 9 | +----+------+-----+ */ }}
阅读全文
0 0
- 使用dbutils进行批处理
- 使用 dbutils 进行批处理
- DBUtils 框架的中batch批处理使用
- jdbc-使用DBUtils进行crud
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用JDBC进行批处理
- 使用commons-dbutils进行JDBC项目开发
- 聊聊安卓开发中主题样式的一种组织架构
- 每天学一点Swift----面向对象上(七)
- GDAL坐标转换
- 一个基于装饰者设计模式的上报框架
- Android XML 文件中引用资源的方法
- 使用 dbutils 进行批处理
- centos7 下安装canal,并实现将mysql数据同步到redis
- [bzoj3676]回文串
- mysql优化
- Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解
- SQL求两列的不重复数据的数目
- android:inputType 常用取值
- 微信小程序 全套 视频 9ph7 教程 全部免费 百度网盘
- js鼠标事件和键盘事件