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.}
分享到:
相关推荐
下面将详细介绍如何使用Eclipse作为开发环境,通过编写一个JDBC工具类来连接MySQL数据库,并实现基本的增删改查功能。 首先,我们需要引入MySQL的JDBC驱动,也就是`mysql-connector.jar`。这个库文件包含了连接...
因此,开发一个强大、精巧、高效的JDBC数据库访问工具类就显得尤为重要。 一个强大的JDBC工具类通常会包含以下功能: 1. **连接池管理**:通过集成像C3P0、HikariCP或Apache DBCP这样的连接池库,实现数据库连接的...
7. **批量操作**:JDBC工具类可能包含批量插入、更新的方法,利用Statement的batch()功能,提高数据库操作的效率。 8. **关闭资源**:为了防止资源泄漏,工具类通常会提供一个关闭资源的方法,确保在操作完成后正确...
现在,我们可以创建一个Java类,使用Spring JDBC Template进行批量插入操作。首先,定义一个User对象,包含`name`和`email`属性,然后创建一个`UserDao`类,如下所示: ```java public class User { private ...
2. **使用PL/SQL或外部编程语言(如C#、Java等)**:通过编程接口(如ODBC、JDBC、Oracle Data Provider for .NET等)进行批量插入操作。这种方式更灵活,可以适应更复杂的数据处理需求。 ### C#代码示例解析 提供...
例如,大量数据的批量插入可能更适合使用JdbcTemplate的`batchUpdate()`方法,或者直接使用JDBC的PreparedStatement来提高效率。 9. **最佳实践** - 保持SQL语句简洁,避免在业务代码中混杂复杂的SQL。 - 避免...
总的来说,`dbutils + oracle 增删改查批量插入示例`是一个很好的学习资源,它帮助开发者掌握如何在Java项目中有效地进行数据库操作,尤其是在处理大数据量时,批量插入的优势尤为明显。通过理解和实践这个示例,...
Hive 是一种广泛应用于大数据处理领域的工具,它为用户提供了类 SQL 的查询语言 HiveQL,使用户能够更加便捷地进行数据提取、转换与加载(ETL)。本文主要针对 Ambari 搭建的 Hadoop 环境下,Hive 的几种数据导入...
本篇将深入探讨如何在Ibatis中实现批量插入数据的DAO(Data Access Object)实例,以及相关的源码分析。 首先,Ibatis允许我们通过SQL映射文件来定义SQL语句,这种方式比传统的JDBC更加灵活且易于维护。批量插入...
JdbcUtils是一个封装了对数据库操作的Java工具类,主要使用JDBC(Java Database Connectivity)API来实现数据库操作。JDBC是Java的一个标准扩展,它提供了一组API用于执行SQL语句。以下是对JdbcUtils工具类的知识点...
总结起来,`Spring JdbcDaoSupport`是简化数据库操作的有效工具,特别适合批量插入数据。通过`JdbcTemplate`的`batchUpdate`方法和`BatchPreparedStatementSetter`,我们可以高效地处理大量数据,同时保持代码的整洁...
**dbutils JDBC第三方工具类详解** 在Java编程中,数据库操作是不可或缺的一部分,而JDBC(Java Database Connectivity)则是Java语言连接数据库的标准接口。然而,直接使用JDBC进行数据库操作时,代码通常会显得...
综上所述,这个项目涉及了多个核心的技术点,包括定时任务的实现、PDF内容的提取、数据库批量插入、线程管理和工具类设计,这些都是Java开发中非常实用且重要的技能。通过实践这样的项目,开发者可以提升自己的综合...
在处理大量数据时,批量插入是一种提高性能的有效策略。本文将深入探讨MyBatis中实现批量插入的两种高效方式。 ### 1. MyBatis `foreach` 标签 `foreach` 是MyBatis中用于在SQL语句中迭代集合的标签,特别适合构建...
本篇文章将深入探讨Struts2如何实现批量插入,并通过源码分析与实际工具应用,帮助开发者更好地理解和运用这一技术。 首先,批量插入的基础在于SQL的批量操作,例如使用`INSERT INTO table_name (columns) VALUES ...
### Kettle 批量插入Hive2:解决表输出速度慢问题 #### 一、问题背景及原因分析 在使用Kettle进行数据处理时,尤其是将数据从源系统传输到目标系统的过程中,如果目标系统是Hive2,则可能会遇到表输出速度极其缓慢...
工具类可能包含批量添加、更新或删除的方法。 10. **线程安全**: 如果工具类设计为线程安全,那么它可以被多个线程共享,无需为每个线程创建单独的实例,从而减少资源消耗。 总的来说,这个JAVA操作MySQL数据库...
本文将深入探讨JDBC连接使用的包以及DBUtils工具包,这两个组件在处理数据库连接时起着关键作用。 首先,我们来了解`mysql-connector-java-5.1.37-bin.jar`这个文件。这是MySQL数据库的Java驱动程序,由MySQL公司...
在大数据处理领域,Hadoop生态中的Hive作为一个数据仓库工具,常常用于处理大规模的数据分析任务。而SpringBoot作为Java开发中的微服务框架,以其简洁的配置和快速的开发能力深受开发者喜爱。将SpringBoot与Hive-...
- 增加:使用`PreparedStatement`进行单条插入,或使用`Statement`进行批量插入。 ```java String sql = "INSERT INTO table_name (column1, column2) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepare...