1_基础版JDBC-DBHelper扩展(事务及大数据操作)

2023-10-28 16:58

本文主要是介绍1_基础版JDBC-DBHelper扩展(事务及大数据操作),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

			JDBC - 基础版DBHelper

/MyProperties.java/

public class MyProperties extends Properties{
private static MyProperties myproperties;
private MyProperties(){
InputStream iis = MyProperties.class.getClassLoader().getResourceAsStream(“db.properties”);
try{
super.load( iis );
}catch( IOException e ){
e.printStackTrace();
}
}

public static MyProperties getInstance(){if( myproperties == null ){myproperties = new MyProperties();}return myproperties;
}

}

/**************************************************************************/

/DBHelper.java/

public class DBHelper{

// 静态块 , 读取一次数据库驱动,
static{try{Class.forName( MyProperties.getInstance().getProperty("driver") );}catch( ClassNotFoundException e ){e.printStackTrace();}
}//获取数据库联接
public Connection getCon() throws SQLException {MyProperties mp = MyProperties.getInstance();Connection con = DriverManager.getConnection( mp.getProperty("url") , mp.getProperty ("username") , mp.getProperty("password") );return con;
}//查询
public List<Map<String , String >> findAll( String sql ,List<Object> params )throws SQLException{Connection con = getCon();PreparedStatement pstmt = con.prepareStatement( sql );setParams( pstmt , params );ResultSet rs = pstmt.executeQuery();ResultSetMetaData rsmd = rs.getMetaData(); //获取关于 ResultSet 对象中列的类型和属性信息的对象List<String> cnlist = new ArrayList<String>();for( int i = 1; i <= rsmd.getColumnCount() ; i++ ){cnlist.add( rsmd.getColumnName( i ) );}List<Map<String , String >> list = new ArrayList<Map<String ,String >>();while( rs.next() ){Map<String , String > map = new HashMap<String , String >();for( String cn :cnlist ){map.put( cn , rs.getString(cn) );}list.add( map );}closeAll(pstmt ,con ,rs );return list;
}//查询聚合函数
public double findDouble( String sql , List<Object> params ) throws SQLException{double result = 0;Connection con = getCon();PreparedStatement pstmt = con.prepareStatement( sql );setParams( pstmt ,params );ResultSet rs = pstmt.executeQuery();while( rs.next() ){rs.getDouble( 1 );}closeAll( pstmt ,con ,rs );return result;
}//封装增删改
public int doUpdate( String sql , List<Object> params ) throws SQLException{Connection con = getCon();PreparedStatement pstmt = con.prepareStatement( sql );setParams( pstmt ,params );int result = pstmt.executeUpdate();closeAll( pstmt ,con ,null );return result;
}//封装带事务的增删改
public void doUpdateTran( List<String> sqls ,List< List<Object> > listparams ){Connection con = getCon();PreparedStatement pstmt = null;con.setAutoCommit( false );  //关闭隐式事务( 一句SQL语句提交一次 )try{if( sqls != null && sqls.size() > 0 ){for( int i = 0; i < sqls.size() ; i++ ){String sql = sqls.get( i );     // 取出每一条sql语句.pstmt = con.prepareStatement( sql );setParams( pstmt , listparams( i ) );pstmt.executeUpdate();}}con.commit();}catch( Exception e ){if( con != null ){con.rollback;   // 回滚}}finally{con.setAutoCommit( true );  //恢复隐式事务closeAll( pstmt ,con ,null );}}//大数据的操作 , 批处理// 集合嵌套集合.
public void doBigDataUpdate( String sql , List<List<Object>> params ) throws SQLException{Connection con = getCon();con.setAutoCommit( false );   PreparedStatement pstmt = null;try{pstmt = con.prepareStatement( sql );for( int i = 0; i < params.size() ; i++ ){List<Object> paramsList = params.get( i );setParams( pstmt , paramsList );pstmt.addBatch();   //添加一次预定义参数if( i % 1000 == 0 ){pstmt.executeBatch(); //批量执行预定义sql ,这个返回值里面存的是每条语句执行的结果}}pstmt.executeBatch();   // 多余的余数在执行.con.commit();}catch( Exception e){e.printStackTrace();con.rollback();    // 异常 ====>>>> 回滚。}finally{con.setAutoCommit( true );closeAll( pstmt ,con ,null );}
}//设置参数 占位符
private void setParams( PreparedStatement pstmt , List<Object> params ) throws SQLException{if( params != null && params.size() > 0 ){for( int i = 1;  i <= params.size() ; i++ ){pstmt.setObject( i , params.get( i-1 ));}}
}// 释放资源
private sttaic void clossAll( PreparedStatement pstmt , Connection con , ResultSet rs ){if( pstmt != null ){pstmt.close();}if( con !=null ){con.close();}if( rs != null ){rs.close();}
}

}

这篇关于1_基础版JDBC-DBHelper扩展(事务及大数据操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/294624

相关文章

MySQL 数据库表操作完全指南:创建、读取、更新与删除实战

《MySQL数据库表操作完全指南:创建、读取、更新与删除实战》本文系统讲解MySQL表的增删查改(CURD)操作,涵盖创建、更新、查询、删除及插入查询结果,也是贯穿各类项目开发全流程的基础数据交互原... 目录mysql系列前言一、Create(创建)并插入数据1.1 单行数据 + 全列插入1.2 多行数据

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

MySQL 数据库表与查询操作实战案例

《MySQL数据库表与查询操作实战案例》本文将通过实际案例,详细介绍MySQL中数据库表的设计、数据插入以及常用的查询操作,帮助初学者快速上手,感兴趣的朋友跟随小编一起看看吧... 目录mysql 数据库表操作与查询实战案例项目一:产品相关数据库设计与创建一、数据库及表结构设计二、数据库与表的创建项目二:员

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

Python实现数据可视化图表生成(适合新手入门)

《Python实现数据可视化图表生成(适合新手入门)》在数据科学和数据分析的新时代,高效、直观的数据可视化工具显得尤为重要,下面:本文主要介绍Python实现数据可视化图表生成的相关资料,文中通过... 目录前言为什么需要数据可视化准备工作基本图表绘制折线图柱状图散点图使用Seaborn创建高级图表箱线图热

Java Stream流以及常用方法操作实例

《JavaStream流以及常用方法操作实例》Stream是对Java中集合的一种增强方式,使用它可以将集合的处理过程变得更加简洁、高效和易读,:本文主要介绍JavaStream流以及常用方法... 目录一、Stream流是什么?二、stream的操作2.1、stream流创建2.2、stream的使用2.

MySQL数据脱敏的实现方法

《MySQL数据脱敏的实现方法》本文主要介绍了MySQL数据脱敏的实现方法,包括字符替换、加密等方法,通过工具类和数据库服务整合,确保敏感信息在查询结果中被掩码处理,感兴趣的可以了解一下... 目录一. 数据脱敏的方法二. 字符替换脱敏1. 创建数据脱敏工具类三. 整合到数据库操作1. 创建服务类进行数据库

MySQL中处理数据的并发一致性的实现示例

《MySQL中处理数据的并发一致性的实现示例》在MySQL中处理数据的并发一致性是确保多个用户或应用程序同时访问和修改数据库时,不会导致数据冲突、数据丢失或数据不一致,MySQL通过事务和锁机制来管理... 目录一、事务(Transactions)1. 事务控制语句二、锁(Locks)1. 锁类型2. 锁粒

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.