`
冯银华
  • 浏览: 5024 次
  • 性别: Icon_minigender_1
  • 来自: 广安
社区版块
存档分类
最新评论

jdbc批量插入工具类

    博客分类:
  • java
阅读更多
1.import java.sql.Connection; 
2.import java.sql.DriverManager; 
3.import java.sql.PreparedStatement; 
4.import java.sql.ResultSet; 
5.import java.sql.SQLException; 
6.import java.sql.Statement; 
7.import java.util.ArrayList; 
8.import java.util.List; 
9. 
10.public class JDBCUtils { 
11.     
12.    private static JDBCUtils jdbcUtils = null; 
13.     
14.    private static String jdbc_driver;   //jdbc驱动 
15.     
16.    private static String jdbc_url;  //jdbc连接Url 
17.     
18.    private static String user_name;  //jdbc连接用户名 
19. 
20.    private static String user_password;  //jdbc连接密码 
21.     
22.    private static String batch_size; //批量提交数 
23.     
24.     
25.    private JDBCUtils() { } 
26.     
27.    /**
28.     * 创建JDBC工具类实例
29.     * @return
30.     */ 
31.    public static synchronized JDBCUtils getInstance(){ 
32.         
33.        if(jdbcUtils == null){ 
34.            jdbcUtils = new JDBCUtils(); 
35.        } 
36.        return jdbcUtils; 
37.    } 
38.     
39.    /**
40.     * 获取 数据库连接
41.     * @return
42.     */ 
43.    public Connection getConnection(){ 
44.        try { 
45.            Class.forName(jdbc_driver);   
46.            Connection conn = DriverManager.getConnection(jdbc_url, user_name, user_password); 
47.            return conn; 
48.             
49.        } catch (Exception e) { 
50.            e.printStackTrace(); 
51.        } 
52.        return null; 
53.    } 
54.     
55.     
56.    /**
57.     * 关闭数据库相关连接
58.     * @param connection
59.     */ 
60.    public void close(ResultSet rs, Statement st, Connection conn) { 
61.        try { 
62.            if(rs != null)rs.close();rs=null; 
63.        } catch (SQLException e) { 
64.            e.printStackTrace(); 
65.        }finally{ 
66.            try { 
67.                if (st != null) st.close();st=null; 
68.            } catch (SQLException e) { 
69.                e.printStackTrace(); 
70.            } finally { 
71.                try { 
72.                    if (conn != null) conn.close();conn=null; 
73.                } catch (SQLException e) { 
74.                    e.printStackTrace(); 
75.                } 
76.            } 
77.        } 
78.    } 
79.     
80.    /**
81.     * 关闭数据库相关连接
82.     * @param connection
83.     */ 
84.    private void close(PreparedStatement pstmt, Connection conn) { 
85.        try { 
86.            if(pstmt != null)pstmt.close(); 
87.        } catch (SQLException e) { 
88.            e.printStackTrace(); 
89.        }finally{ 
90.            try { 
91.                if (conn != null) conn.close(); 
92.            } catch (SQLException e) { 
93.                e.printStackTrace(); 
94.            } 
95.        } 
96.    } 
97.     
98.    /**
99.     * 增加单条数据
100.     * @param sql   sql语句
101.     * @param values        参数值 
102.     * @return      是否增加成功
103.     * @throws SQLException
104.     */ 
105.    public boolean saveOrUpdate(String sql,Object ... values) throws SQLException{ 
106.        Connection conn = getConnection();  //获取数据库连接 
107.        PreparedStatement pstmt =  null; 
108.        try { 
109.            conn.setAutoCommit(false);          //设置手动提交事务 
110.            pstmt = conn.prepareStatement(sql);   //创建PreparedStatement对象 
111.            //赋值 
112.            for (int i = 0; i < values.length; i++) { 
113.                pstmt.setObject(i+1, values[i]); 
114.            } 
115.             
116.            pstmt.execute();   //执行操作 
117.            conn.commit();          //提交事务 
118.            close(pstmt,conn);      //关闭相关连接 
119.        } catch (SQLException e) { 
120.            e.printStackTrace(); 
121.        }finally{ 
122.            close(pstmt,conn);      //关闭相关连接 
123.        } 
124.        return true; 
125.    } 
126.    /**
127.     * 删除
128.     * @param sql
129.     * @return
130.     */ 
131.    public boolean batchDelete(String sql){ 
132.        Connection conn = getConnection();  //获取数据库连接 
133.        PreparedStatement pstmt =  null; 
134.        try { 
135.            conn.setAutoCommit(false);          //设置手动提交事务 
136.            pstmt = conn.prepareStatement(sql);   //创建PreparedStatement对象 
137.             
138.            pstmt.execute();   //执行操作 
139.            conn.commit();          //提交事务 
140.            close(pstmt,conn);      //关闭相关连接 
141.        } catch (SQLException e) { 
142.            e.printStackTrace(); 
143.        }finally{ 
144.            close(pstmt,conn);      //关闭相关连接 
145.        } 
146.        return true; 
147.         
148.    } 
149.    /**
150.     * 批量增加与修改
151.     * @param sql       insert or update 语句
152.     * @param params    参数集合
153.     * @return
154.     * @throws SQLException
155.     */ 
156.    public boolean  batchSaveOrUpdate(String sql,List<Object[]> paramList) { 
157.        int count = Integer.parseInt(batch_size)-1; 
158.        Connection conn = getConnection();  //获取数据库连接 
159.        PreparedStatement pstmt = null; 
160.        try { 
161.            conn.setAutoCommit(false);          //设置手动提交事务 
162.            pstmt = conn.prepareStatement(sql);   //创建PreparedStatement对象 
163.            //赋值 
164.            for (int i = 0; i < paramList.size(); i++) { 
165.                
166.                Object[] values =  paramList.get(i); 
167.                for (int j = 0; j < values.length ; j++) { 
168.                    pstmt.setObject(j+1, values[j]); 
169.                } 
170.                pstmt.addBatch(); 
171.                 
172.                //批量数等于 batch_size 时 提交数据 
173.                if(i != 0 && (i%count == 0)){ 
174.                    int ids[] = pstmt.executeBatch();   //执行操作 
175.                    if(ids.length == count+1 ){ 
176.                        conn.commit();          //提交事务 
177.                    }else{ 
178.                        conn.rollback();        //事务回滚 
179.                    } 
180.                    pstmt.clearBatch(); 
181.                } 
182.            } 
183.             
184.            int ids[] = pstmt.executeBatch();   //执行操作 
185.            if(ids.length == paramList.size()%(count+1) ){ 
186.                conn.commit();          //提交事务 
187.            }else{ 
188.                conn.rollback();        //事务回滚 
189.            } 
190.            
191.        } catch (SQLException e) { 
192.            e.printStackTrace(); 
193.        }finally{ 
194.            close(pstmt,conn);      //关闭相关连接 
195.        } 
196.        return true; 
197.    } 
198.     
199.     
200.     
201.    public static void main(String[] args) throws SQLException { 
202.//        JDBCUtils utils = JDBCUtils.getInstance(); 
203.//         
204.//         
205.//        String sql = "insert into tbl_yitiansystem_systemlog (id,message) values(?,?);"; 
206.//        List paramList = new ArrayList();   
207.//        for (int i = 0; i < 10; i++) { 
208.//            String [] param = new String[]{i+"",i+""}; 
209.//            paramList.add(param); 
210.//        } 
211.//         
212.//        boolean t = utils.batchSaveOrUpdate(sql, paramList); 
213.//        System.out.println(t); 
214.//         
215.    } 
216. 
217.} 
分享到:
评论

相关推荐

    jdbc连接mysql工具类

    下面将详细介绍如何使用Eclipse作为开发环境,通过编写一个JDBC工具类来连接MySQL数据库,并实现基本的增删改查功能。 首先,我们需要引入MySQL的JDBC驱动,也就是`mysql-connector.jar`。这个库文件包含了连接...

    JDBC数据库访问工具类 强大 精巧 高效

    因此,开发一个强大、精巧、高效的JDBC数据库访问工具类就显得尤为重要。 一个强大的JDBC工具类通常会包含以下功能: 1. **连接池管理**:通过集成像C3P0、HikariCP或Apache DBCP这样的连接池库,实现数据库连接的...

    javaweb jdbc工具类.zip

    7. **批量操作**:JDBC工具类可能包含批量插入、更新的方法,利用Statement的batch()功能,提高数据库操作的效率。 8. **关闭资源**:为了防止资源泄漏,工具类通常会提供一个关闭资源的方法,确保在操作完成后正确...

    spring jdbc Templatetest 访问mysql数据库,批量插入数据

    现在,我们可以创建一个Java类,使用Spring JDBC Template进行批量插入操作。首先,定义一个User对象,包含`name`和`email`属性,然后创建一个`UserDao`类,如下所示: ```java public class User { private ...

    oracle数据库中批量插入问题

    2. **使用PL/SQL或外部编程语言(如C#、Java等)**:通过编程接口(如ODBC、JDBC、Oracle Data Provider for .NET等)进行批量插入操作。这种方式更灵活,可以适应更复杂的数据处理需求。 ### C#代码示例解析 提供...

    SpringJdbcTemplate封装工具类

    例如,大量数据的批量插入可能更适合使用JdbcTemplate的`batchUpdate()`方法,或者直接使用JDBC的PreparedStatement来提高效率。 9. **最佳实践** - 保持SQL语句简洁,避免在业务代码中混杂复杂的SQL。 - 避免...

    dbutils + oracle 增删改查批量插入示例

    总的来说,`dbutils + oracle 增删改查批量插入示例`是一个很好的学习资源,它帮助开发者掌握如何在Java项目中有效地进行数据库操作,尤其是在处理大数据量时,批量插入的优势尤为明显。通过理解和实践这个示例,...

    Hive几种数据导入方式

    Hive 是一种广泛应用于大数据处理领域的工具,它为用户提供了类 SQL 的查询语言 HiveQL,使用户能够更加便捷地进行数据提取、转换与加载(ETL)。本文主要针对 Ambari 搭建的 Hadoop 环境下,Hive 的几种数据导入...

    ibatis的批量插入DAO实例

    本篇将深入探讨如何在Ibatis中实现批量插入数据的DAO(Data Access Object)实例,以及相关的源码分析。 首先,Ibatis允许我们通过SQL映射文件来定义SQL语句,这种方式比传统的JDBC更加灵活且易于维护。批量插入...

    04-完整JdbcUtils工具类.pdf

    JdbcUtils是一个封装了对数据库操作的Java工具类,主要使用JDBC(Java Database Connectivity)API来实现数据库操作。JDBC是Java的一个标准扩展,它提供了一组API用于执行SQL语句。以下是对JdbcUtils工具类的知识点...

    Spring JdbcDaoSupport 批量插入数据

    总结起来,`Spring JdbcDaoSupport`是简化数据库操作的有效工具,特别适合批量插入数据。通过`JdbcTemplate`的`batchUpdate`方法和`BatchPreparedStatementSetter`,我们可以高效地处理大量数据,同时保持代码的整洁...

    dbutils JDBC第三方工具类

    **dbutils JDBC第三方工具类详解** 在Java编程中,数据库操作是不可或缺的一部分,而JDBC(Java Database Connectivity)则是Java语言连接数据库的标准接口。然而,直接使用JDBC进行数据库操作时,代码通常会显得...

    定时读取PDF文件,并批量插入到数据库

    综上所述,这个项目涉及了多个核心的技术点,包括定时任务的实现、PDF内容的提取、数据库批量插入、线程管理和工具类设计,这些都是Java开发中非常实用且重要的技能。通过实践这样的项目,开发者可以提升自己的综合...

    mybatis中批量插入的两种方式(高效插入)

    在处理大量数据时,批量插入是一种提高性能的有效策略。本文将深入探讨MyBatis中实现批量插入的两种高效方式。 ### 1. MyBatis `foreach` 标签 `foreach` 是MyBatis中用于在SQL语句中迭代集合的标签,特别适合构建...

    Struts2批量插入

    本篇文章将深入探讨Struts2如何实现批量插入,并通过源码分析与实际工具应用,帮助开发者更好地理解和运用这一技术。 首先,批量插入的基础在于SQL的批量操作,例如使用`INSERT INTO table_name (columns) VALUES ...

    kettle批量插入hive2,解决表输出速度慢问题

    ### Kettle 批量插入Hive2:解决表输出速度慢问题 #### 一、问题背景及原因分析 在使用Kettle进行数据处理时,尤其是将数据从源系统传输到目标系统的过程中,如果目标系统是Hive2,则可能会遇到表输出速度极其缓慢...

    JAVA操作mysql工具类

    工具类可能包含批量添加、更新或删除的方法。 10. **线程安全**: 如果工具类设计为线程安全,那么它可以被多个线程共享,无需为每个线程创建单独的实例,从而减少资源消耗。 总的来说,这个JAVA操作MySQL数据库...

    JDBC连接使用的包与DBUtils工具包

    本文将深入探讨JDBC连接使用的包以及DBUtils工具包,这两个组件在处理数据库连接时起着关键作用。 首先,我们来了解`mysql-connector-java-5.1.37-bin.jar`这个文件。这是MySQL数据库的Java驱动程序,由MySQL公司...

    SpringBoot整合hive-jdbc示例

    在大数据处理领域,Hadoop生态中的Hive作为一个数据仓库工具,常常用于处理大规模的数据分析任务。而SpringBoot作为Java开发中的微服务框架,以其简洁的配置和快速的开发能力深受开发者喜爱。将SpringBoot与Hive-...

    jdbc线程池演示demo

    - 增加:使用`PreparedStatement`进行单条插入,或使用`Statement`进行批量插入。 ```java String sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepare...

Global site tag (gtag.js) - Google Analytics