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.}
分享到:
相关推荐
本项目对如何在Springboot项目中整合hive-jdbc进行简单示例和介绍,亲测可用,请放心下载。
除了常规的 JDBC 技术外,更涵盖 <利用反射及 JDBC 元数据编写通用的查询方法>、<使用 DBUtils 工具类>、设计模式>、<编写通用的 DAO 接口实现类> 等企业级开发内容。源码级讲授 DBUtils 工具类的实现思想,DEBUG ...
Java面试题75:批量插入几百万条数据 Java面试题76:有没有使用过redis Java面试题77:redis的使用场景 Java面试题78:redis存储对象的方式 Java面试题79:redis数据淘汰机制 Java面试题80:java访问redis级redis...
11.4. JDBC批量操作 11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用...
11.4. JDBC批量操作 11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用...
实例076 批量替换某一类字符串 95 实例077 把异常与错误信息显示到窗体中 97 实例078 从字符串中分离文件路径、 文件名及扩展名 98 实例079 判断手机号的合法性 99 实例080 用字符串构建器追加字符 100 实例081 去掉...
6.1.3 插入和移除值 6.1.4 值的绘制 6.2 表格 6.2.1 简单表格 6.2.2 表格模型 6.2.3对行和列的操作 6.3 树 6.3.1 简单的树 6.3.2 结点枚举 6.2.3 绘制结点 6.2.4 监听树事件 6.2.5 定制树模型 6.4 文本构件 6.4.1 ...
13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....
13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....
13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....
13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1....
13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. 大批量更新/删除(Bulk update/delete) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与...
13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. 大批量更新/删除(Bulk update/delete) 14. HQL: Hibernate查询语言 14.1. 大小写敏感性问题 14.2. from子句 14.3. 关联(Association)与...
13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小...
13.1. 批量插入(Batch inserts) 13.2. 批量更新(Batch updates) 13.3. StatelessSession (无状态session)接口 13.4. DML(数据操作语言)风格的操作(DML-style operations) 14. HQL: Hibernate查询语言 14.1. 大小...
22.11 mysqlimport程序(文本导入、批量导入) 22.12 mysqlshow程序(查看信息) 22.13 myisamchk程序(修复MyISAM文件) 22.14 myisampack程序(压缩MyISAM文件) 第23章 MySQL API应用指南 23.1 ...