`

ch00 jdbc批量插入更新工具类

 
阅读更多
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class JDBCUtils {
    
    private static JDBCUtils jdbcUtils = null;
    
    private static String jdbc_driver;   //jdbc驱动
    
    private static String jdbc_url;  //jdbc连接Url
    
    private static String user_name;  //jdbc连接用户名

    private static String user_password;  //jdbc连接密码
    
    private static String batch_size; //批量提交数
    
    
    private JDBCUtils() { }
    
    /**
     * 创建JDBC工具类实例
     * @return
     */
    public static synchronized JDBCUtils getInstance(){
        
        if(jdbcUtils == null){
            jdbcUtils = new JDBCUtils();
        }
        return jdbcUtils;
    }
    
    /**
     * 获取 数据库连接
     * @return
     */
    public Connection getConnection(){
        try {
            Class.forName(jdbc_driver);  
            Connection conn = DriverManager.getConnection(jdbc_url, user_name, user_password);
            return conn;
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    
    
    /**
     * 关闭数据库相关连接
     * @param connection
     */
    public void close(ResultSet rs, Statement st, Connection conn) {
        try {
            if(rs != null)rs.close();rs=null;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            try {
                if (st != null) st.close();st=null;
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    if (conn != null) conn.close();conn=null;
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**
     * 关闭数据库相关连接
     * @param connection
     */
    private void close(PreparedStatement pstmt, Connection conn) {
        try {
            if(pstmt != null)pstmt.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            try {
                if (conn != null) conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 增加单条数据
     * @param sql   sql语句
     * @param values        参数值 
     * @return      是否增加成功
     * @throws SQLException
     */
    public boolean saveOrUpdate(String sql,Object ... values) throws SQLException{
        Connection conn = getConnection();  //获取数据库连接
        PreparedStatement pstmt =  null;
        try {
            conn.setAutoCommit(false);          //设置手动提交事务
            pstmt = conn.prepareStatement(sql);   //创建PreparedStatement对象
            //赋值
            for (int i = 0; i < values.length; i++) {
                pstmt.setObject(i+1, values[i]);
            }
            
            pstmt.execute();   //执行操作
            conn.commit();          //提交事务
            close(pstmt,conn);      //关闭相关连接
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            close(pstmt,conn);      //关闭相关连接
        }
        return true;
    }
    /**
     * 删除
     * @param sql
     * @return
     */
    public boolean batchDelete(String sql){
        Connection conn = getConnection();  //获取数据库连接
        PreparedStatement pstmt =  null;
        try {
            conn.setAutoCommit(false);          //设置手动提交事务
            pstmt = conn.prepareStatement(sql);   //创建PreparedStatement对象
            
            pstmt.execute();   //执行操作
            conn.commit();          //提交事务
            close(pstmt,conn);      //关闭相关连接
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            close(pstmt,conn);      //关闭相关连接
        }
        return true;
        
    }
    /**
     * 批量增加与修改
     * @param sql       insert or update 语句
     * @param params    参数集合
     * @return
     * @throws SQLException
     */
    public boolean  batchSaveOrUpdate(String sql,List<Object[]> paramList) {
        int count = Integer.parseInt(batch_size)-1;
        Connection conn = getConnection();  //获取数据库连接
        PreparedStatement pstmt = null;
        try {
            conn.setAutoCommit(false);          //设置手动提交事务
            pstmt = conn.prepareStatement(sql);   //创建PreparedStatement对象
            //赋值
            for (int i = 0; i < paramList.size(); i++) {
               
                Object[] values =  paramList.get(i);
                for (int j = 0; j < values.length ; j++) {
                    pstmt.setObject(j+1, values[j]);
                }
                pstmt.addBatch();
                
                //批量数等于 batch_size 时 提交数据
                if(i != 0 && (i%count == 0)){
                    int ids[] = pstmt.executeBatch();   //执行操作
                    if(ids.length == count+1 ){
                        conn.commit();          //提交事务
                    }else{
                        conn.rollback();        //事务回滚
                    }
                    pstmt.clearBatch();
                }
            }
            
            int ids[] = pstmt.executeBatch();   //执行操作
            if(ids.length == paramList.size()%(count+1) ){
                conn.commit();          //提交事务
            }else{
                conn.rollback();        //事务回滚
            }
           
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            close(pstmt,conn);      //关闭相关连接
        }
        return true;
    }
    
    
    
    public static void main(String[] args) throws SQLException {
//        JDBCUtils utils = JDBCUtils.getInstance();
//        
//        
//        String sql = "insert into tbl_yitiansystem_systemlog (id,message) values(?,?);";
//        List paramList = new ArrayList();  
//        for (int i = 0; i < 10; i++) {
//            String [] param = new String[]{i+"",i+""};
//            paramList.add(param);
//        }
//        
//        boolean t = utils.batchSaveOrUpdate(sql, paramList);
//        System.out.println(t);
//        
    }

}

 

分享到:
评论

相关推荐

    ch4.JDBC技术_JAVA数据库_jdbc_canalsj4_

    驱动管理器负责加载和管理数据库驱动,JDBC API提供了一组接口和类供应用程序调用,而数据库驱动则是数据库厂商提供的实现这些接口的具体代码,用于与特定的数据库通信。 2. **JDBC基本操作流程** 使用JDBC通常...

    CH341-i2c工具

    "CH341-i2c工具"是一款专用于与I2C总线设备进行通信的软件工具,它基于CH341芯片驱动程序,能够帮助用户在个人计算机上与使用I2C接口的硬件设备进行交互。CH341芯片是一种常见的USB到串行/并行接口转换器,广泛应用...

    CH341DP_SPI下载工具

    标题中的“CH341DP_SPI下载工具”指的是一个专门用于通过SPI接口对单片机进行编程的软件,其中CH341DP是该工具所使用的USB转SPI接口芯片。这款工具适用于那些需要通过USB接口对51系列或AVR系列单片机进行固件更新或...

    CH7511B配置刷新工具CH7511B-Utility-v1.225.rar

    软件介绍: CH7511LVDS配置说明及刷新工具资源列表:CH... CH7511B EEPROMMap GUI-v0.01.14.exe CH7511B.EXE CH7511B_00_00_C2.bin ch7511b_dos.jpg CH7511B-Utility-v1-225.exe SiUSBXp.dll VCI_GYI2C.dll

    用JDBC向Students表中插入数据

    本文将详细讲解如何使用JDBC(Java Database Connectivity)来向一个名为“Students”的数据库表中插入数据,同时也会涉及Oracle数据库和Java的相关知识点。 首先,JDBC是Java语言与各种数据库交互的一套标准接口,...

    CH9329配置&测试工具

    CH9329配置&测试工具,用于在电脑上直接配置CH9329相关模式

    CH554模拟CDC类,PC免驱,可以实现快速批量上下传数据

    在实际应用中,CH554的快速批量数据上传下载能力尤其适用于需要大量数据交换的场景,如传感器网络的数据采集、嵌入式系统的固件更新、测试与测量设备的数据传输等。CH554的高集成度使其在设计上更具灵活性,可以减少...

    CH7511LVDS配置说明及刷新工具

    《CH7511LVDS配置说明及刷新工具详解》 在嵌入式系统和显示技术领域,CH7511是一款广泛应用的LVDS(Low Voltage Differential Signaling,低电压差分信号)接口控制器,主要用于处理视频信号的传输。本文将深入探讨...

    ch340驱动工具

    CH340驱动工具是一款专为CH340系列芯片设计的驱动程序,适用于多种操作系统,包括Windows XP、Windows 7、Windows 8以及Windows 10。这款驱动的主要功能是帮助用户在计算机上识别和操作使用CH340芯片的USB到串口转换...

    CH341/CH340 Win10串口驱动工具

    USB转串口CH341/CH340的WINDOWS驱动程序安装包 支持WINDOWS 98/ME/2000/XP/Server 2003/VISTA/ Server 2008/Win7/Win8/Win10 32位/64位,通过微软数字签名认证, 在计算机端将USB设备仿真为标准Serial串口设备COM? ...

    CH9329资料_hid_CH9329芯片资料_CH9329Test_CfgTool_CH9329_

    CH9329是一款常用的USB接口控制器,特别适用于HID(Human Interface Device)类设备的开发。这个压缩包文件包含了关于CH9329芯片的详细资料和相关的辅助设计工具,帮助开发者更有效地进行USB HID设备的设计和调试。 ...

    CH341T I2C工具 I2C助手

    CH341T模块I2C功能专用工具,具有定时发送功能。因为没法设置不收取积分。如果没积分的朋友可以通过如下下载 链接:...

    CH340串口驱动和串口调试工具

    CH340串口驱动和串口调试工具

    SQL Server 2005 JDBC Driver_1.1_CH

    SQL Server 2005 JDBC Driver_1.1_CH中文开发文档,用SQL Server 2005数据库做项目的必备文档。

    CH341A编程器软件_v1.30.rar_CH341A编程器_USB编程器_ch341a 擦除 00_ch341a擦除_exp

    "ch341a_擦除_00"和"ch341a擦除_exp"标签可能是指擦除芯片的两种模式:全芯片擦除(00)和扩展擦除(exp)。全芯片擦除会清除整个芯片的所有存储区,而扩展擦除可能针对特定的存储分区或者更精细的擦除选项。 最后...

    windows-ch341转iic协议工具和驱动

    1 在c盘下以管理员权限运行i2c_driver.EXE,安装驱动; 安装完之后打开设备管理器,会新增外部接口设备,注意这里不是新增端口;... &gt;&gt;外部接口&gt;&gt;USB-EEP/I2X...CH341A 2 打开供应商的i2c工具;即可使用iic读写;

    springboot log4jdbc 打印完整sql

    Log4jdbc 是一个 Logging 工具,能够打印完整的 SQL 语句,包括参数 replacement,从而帮助开发者更好地维护和调试项目。下面我们将详细介绍如何在 SpringBoot 项目中使用 Log4jdbc 打印完整的 SQL 语句。 一、...

    CH340驱动工具

    CH340驱动工具是一款专为CH340系列USB转串口芯片设计的驱动程序,它使得用户可以通过USB接口连接并通信到各种基于串口的设备,如Arduino开发板、模块化电子设备等。CH340芯片因其性价比高、兼容性强的特点,在DIY...

    Java文件处理工具类--FileUtil

    char ch = fileName.charAt(i); // Replace invlid chars: \\/:*?\"| switch (ch) { case '\\': case '/': case ':': case '*': case '?': case '\"': case ' case '&gt;': case '...

    CH372DBG.zip_CH372DBG_Ch372_ch372调试工具_site:www.pudn.com

    《CH372DBG:深入理解CH372芯片及其调试工具》 CH372DBG.zip 是一个针对CH372芯片的调试工具包,它包含了必要的软件代码和编译好的执行程序,使得开发者能够对CH372芯片进行有效的调试和应用开发。这个工具包在...

Global site tag (gtag.js) - Google Analytics