废话不多说,直接上源代码,最后有使用方法,当然,也可以作为普通公用类使用,只是封装成JAR更方便使用。

  1. package db.util;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.InputStreamReader;
  6. import java.sql.CallableStatement;
  7. import java.sql.Connection;
  8. import java.sql.DriverManager;
  9. import java.sql.PreparedStatement;
  10. import java.sql.ResultSet;
  11. import java.sql.ResultSetMetaData;
  12. import java.sql.SQLException;
  13. import java.util.ArrayList;
  14. import java.util.HashMap;
  15. import java.util.List;
  16. import java.util.Map;
  17. import org.json.JSONObject;
  18. /*
  19. * 说明:封装JDBC数据库增删改查、存储过程
  20. * 作者:Jiro.Chen
  21. * 时间:2016-12-12 15:13:54
  22. * */
  23. public class ConnectionUtil {
  24. private static String DRIVER = null;
  25. private static String URL = null;
  26. private static String USERNAME = null;
  27. private static String PASSWORD = null;
  28. private Connection conn = null;
  29. private PreparedStatement pstmt = null;
  30. private CallableStatement callableStatement = null;
  31. private ResultSet resultSet = null;
  32. private void init(){
  33. try {
  34. Class.forName(DRIVER);
  35. } catch (ClassNotFoundException e) {
  36. System.out.println("加载驱动错误");
  37. System.out.println(e.getMessage());
  38. }
  39. }
  40. public ConnectionUtil(String dbParam){
  41. String path = getCurrentPath();
  42. String filePath = path + "\\db.JSON";
  43. String text = null;
  44. try{
  45. text = this.readFile(new File(filePath));
  46. if(text.equals(null) || text.equals("")){
  47. filePath = path + "\\db.json";
  48. text = this.readFile(new File(filePath));
  49. if(text.equals(null) || text.equals("")){
  50. System.out.println("找不到指定文件");
  51. }
  52. }
  53. }catch(Exception e){
  54. e.printStackTrace();
  55. }
  56. JSONObject json = new JSONObject(text);
  57. JSONObject DB = json.getJSONObject(dbParam);
  58. DRIVER = DB.getString("DRIVER");
  59. URL = DB.getString("URL");
  60. USERNAME = DB.getString("USERNAME");
  61. PASSWORD = DB.getString("PASSWORD");
  62. this.init();
  63. }
  64. private String readFile(File file){
  65. String text = null;
  66. try{
  67. if(file.isFile() && file.exists()){
  68. InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
  69. BufferedReader bufferedReader = new BufferedReader(read);
  70. String lineTxt = null;
  71. while((lineTxt = bufferedReader.readLine()) != null){
  72. text += lineTxt;
  73. }
  74. read.close();
  75. }
  76. }catch(Exception e){
  77. e.printStackTrace();
  78. }
  79. return text;
  80. }
  81. private String getCurrentPath(){
  82. String rootPath = null;
  83. java.net.URL url = ConnectionUtil.class.getProtectionDomain().getCodeSource().getLocation();
  84. String filePath = null;
  85. try{
  86. filePath = java.net.URLDecoder.decode(url.getPath(), "utf-8");
  87. }catch (Exception e) {
  88. e.printStackTrace();
  89. }
  90. if(filePath.endsWith(".jar")){
  91. filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
  92. }
  93. java.io.File file = new java.io.File(filePath);
  94. rootPath = file.getAbsolutePath();
  95. rootPath = rootPath.substring(0, rootPath.lastIndexOf("\\"));
  96. rootPath += "\\classes";
  97. return rootPath;
  98. }
  99. public Connection getConnection(){
  100. try{
  101. conn = DriverManager.getConnection(URL, USERNAME,
  102. PASSWORD);
  103. }catch (SQLException e){
  104. System.out.println(e.getMessage());
  105. }
  106. return conn;
  107. }
  108. public int executeUpdate(String sql, Object[] params){
  109. int affectedLine = 0;
  110. try{
  111. conn = this.getConnection();
  112. pstmt = conn.prepareStatement(sql);
  113. if (params != null){
  114. for (int i = 0; i < params.length; i++){
  115. pstmt.setObject(i + 1, params[i]);
  116. }
  117. }
  118. affectedLine = pstmt.executeUpdate();
  119. }catch (SQLException e){
  120. System.out.println(e.getMessage());
  121. }finally {
  122. closeAll();
  123. }
  124. return affectedLine;
  125. }
  126. /**
  127. * SQL 查询将查询结果直接放入ResultSet中
  128. */
  129. private ResultSet executeQueryRS(String sql, Object[] params){
  130. try{
  131. conn = this.getConnection();
  132. pstmt = conn.prepareStatement(sql);
  133. if (params != null){
  134. for (int i = 0; i < params.length; i++){
  135. pstmt.setObject(i + 1, params[i]);
  136. }
  137. }
  138. resultSet = pstmt.executeQuery();
  139. }catch (SQLException e){
  140. System.out.println(e.getMessage());
  141. }
  142. return resultSet;
  143. }
  144. /**
  145. * 获取结果集,并将结果放在List中
  146. */
  147. public List<Object> excuteQuery(String sql, Object[] params){
  148. ResultSet rs = executeQueryRS(sql, params);
  149. ResultSetMetaData rsmd = null;
  150. int columnCount = 0;
  151. try{
  152. rsmd = rs.getMetaData();
  153. columnCount = rsmd.getColumnCount();
  154. }catch (SQLException e1) {
  155. System.out.println(e1.getMessage());
  156. }
  157. List<Object> list = new ArrayList<Object>();
  158. try{
  159. while (rs.next()) {
  160. Map<String, Object> map = new HashMap<String, Object>();
  161. for (int i = 1; i <= columnCount; i++) {
  162. map.put(rsmd.getColumnLabel(i), rs.getObject(i));
  163. }
  164. list.add(map);
  165. }
  166. }catch (SQLException e) {
  167. System.out.println(e.getMessage());
  168. }finally {
  169. closeAll();
  170. }
  171. return list;
  172. }
  173. /**
  174. * 存储过程带有一个输出参数的方法
  175. * @param sql 存储过程语句
  176. * @param params 参数数组
  177. * @param outParamPos 输出参数位置
  178. * @param SqlType 输出参数类型
  179. * @return 输出参数的值
  180. */
  181. public Object excuteQuery(String sql, Object[] params,int outParamPos, int SqlType){
  182. Object object = null;
  183. conn = this.getConnection();
  184. try{
  185. callableStatement = conn.prepareCall(sql);
  186. if(params != null){
  187. for(int i = 0; i < params.length; i++) {
  188. callableStatement.setObject(i + 1, params[i]);
  189. }
  190. }
  191. callableStatement.registerOutParameter(outParamPos, SqlType);
  192. callableStatement.execute();
  193. object = callableStatement.getObject(outParamPos);
  194. }catch (SQLException e){
  195. System.out.println(e.getMessage());
  196. }finally{
  197. closeAll();
  198. }
  199. return object;
  200. }
  201. private void closeAll(){
  202. if (resultSet != null){
  203. try {
  204. resultSet.close();
  205. } catch (SQLException e){
  206. System.out.println(e.getMessage());
  207. }
  208. }
  209. if(pstmt != null){
  210. try{
  211. pstmt.close();
  212. } catch (SQLException e){
  213. System.out.println(e.getMessage());
  214. }
  215. }
  216. if(callableStatement != null){
  217. try{
  218. callableStatement.close();
  219. }catch (SQLException e) {
  220. System.out.println(e.getMessage());
  221. }
  222. }
  223. if(conn != null){
  224. try{
  225. conn.close();
  226. } catch (SQLException e) {
  227. System.out.println(e.getMessage());
  228. }
  229. }
  230. }
  231. }

使用方法:

在Web工程src目录下新建db.JSON或者db.json文件

  1. {
  2. "DB":{
  3. "DRIVER"  :"com.microsoft.sqlserver.jdbc.SQLServerDriver",
  4. "URL"     :"jdbc:sqlserver://223.68.143.21:12922;DatabaseName=TwRailway_ECP",
  5. "USERNAME":"sa",
  6. "PASSWORD":"senao"
  7. }
  8. }

其中,DB可以有多个

工程导入JAR包之后,通过

  1. ConnectionUtil conn = new ConnectionUtil("DB");

配置文件db.JSON可以写多个数据库,参数DB指定使用哪种数据库建立连接

方法介绍:

1.public Connection getConnection()

功能:

JAR中提供了全套的增删改查的方法,但为了应对某种特殊情况下的需求,方法不能满足程序员需求时,可以使用此方法建立与数据库的连接,自行编写DAO层方法。

参数说明:

传回值:

传回Connection连接或NULL

2.public int executeUpdate(String sql, Object[] params)

功能:

使用PrepareStatement预处理执行sql,适用于数据新增、修改、删除等操作。

参数说明:

sql 执行的sql语句

params 对象数组,存储要新增、修改或删除的数据。可以为空。

传回值:

传回1表示成功

传回0表示失败

3.public List<Object> excuteQuery(String sql, Object[] params)

功能:

使用PrepareStatement预处理执行sql,适用于数据查询。

参数说明:

sql 执行的sql语句

params 对象数组,sql语句中预设的值。可以为空。

传回值:

带有Map索引的List类型数据

只是适用于小型项目,减少DAO层编码量,增强代码的重用性。可以封装为公用类使用,也可以作为JAR档。

注意:此JAR依赖json.jar包。

Java封装JDBC数据库增、删、改、查操作成JAR文件,以供Web工程调用,适用于多种数据库的更多相关文章

  1. 好用的SQL TVP~~独家赠送[增-删-改-查]的例子

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化.  本系列主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  2. iOS FMDB的使用(增,删,改,查,sqlite存取图片)

    iOS FMDB的使用(增,删,改,查,sqlite存取图片) 在上一篇博客我对sqlite的基本使用进行了详细介绍... 但是在实际开发中原生使用的频率是很少的... 这篇博客我将会较全面的介绍FM ...

  3. iOS sqlite3 的基本使用(增 删 改 查)

    iOS sqlite3 的基本使用(增 删 改 查) 这篇博客不会讲述太多sql语言,目的重在实现sqlite3的一些基本操作. 例:增 删 改 查 如果想了解更多的sql语言可以利用强大的互联网. ...

  4. django ajax增 删 改 查

    具于django ajax实现增 删 改 查功能 代码示例: 代码: urls.py from django.conf.urls import url from django.contrib impo ...

  5. ADO.NET 增 删 改 查

    ADO.NET:(数据访问技术)就是将C#和MSSQL连接起来的一个纽带 可以通过ADO.NET将内存中的临时数据写入到数据库中 也可以将数据库中的数据提取到内存中供程序调用 ADO.NET所有数据访 ...

  6. MVC EF 增 删 改 查

    using System;using System.Collections.Generic;using System.Linq;using System.Web;//using System.Data ...

  7. python基础中的四大天王-增-删-改-查

    列表-list-[] 输入内存储存容器 发生改变通常直接变化,让我们看看下面列子 增---默认在最后添加 #append()--括号中可以是数字,可以是字符串,可以是元祖,可以是集合,可以是字典 #l ...

  8. MyBatis的配置与使用(增,删,改,查)

    ---恢复内容开始--- Mybatis入门介绍 一.MyBatis介绍 什么是MyBtis? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框 ...

  9. Django(十)模型:django模型类对数据库的:增/删/改/查、自关联、管理器、元选项(指定表名)

    一.插入.更新和删除 调用一个模型类对象的save方法的时候就可以实现对模型类对应数据表的插入和更新. 调用一个模型类对象的delete方法的时候就可以实现对模型类对应数据表数据的删除. 二.自关联 ...

随机推荐

  1. jenkins配置到gitlab拉代码

    参照: jenkins 从git拉取代码-简明扼要 https://www.cnblogs.com/jwentest/p/7065783.html 持续集成①安装部署jenkins从git获取代码-超 ...

  2. git使用记录九:开发中临时加塞了紧急任务怎么处理

    开发中临时加塞了紧急任务怎么处理 隐藏工作区域 git stash git status 查询隐藏的列表 git stash list 处理完bug,提交之后,再恢复隐藏的工作区域 git stash ...

  3. Java必备主流技术流程图,写得非常好!

    作者:Jay_huaxiao https://juejin.im/post/5d214639e51d4550bf1ae8df 1.spring的生命周期 Spring作为当前Java最流行.最强大的轻 ...

  4. Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/ssm]]

    org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].Standard ...

  5. 关于数位dp的一些思考

    大致看完了claris的数位dp的pdf,感觉题目很厚实啊QAQ. 然后回过头再总结一下(感觉也不算总结啊,就是日常吐槽....) 首先数位dp这个东西是有格式的....所以明天早上再找道题来把模板联 ...

  6. android jni控制gpio (rk3288)

    1.添加驱动程序 2.编写jni c程序编译为库给java调用 3.app调用jni静态链接库操作底层驱动 1.添加驱动程序 修改/work/rk3288/firefly-rk3288_android ...

  7. 交叉编译fw_printenv

    source /opt/poky/environment... 创建交叉编译环境. 更改u-boot/tools/env/Make 添加CC 9 CC=aarch64-poky-linux-gcc - ...

  8. crontab+selenium不能定时执行测试的原因

    上一篇我提到用无界面selenium实现网页的自动签到.本来测试好好 的没问题,但是加进crontab定时任务却一点动静页没有,后来发现是浏览器的显示问题,自动任务要这样写: 12 3 * * * e ...

  9. Tensorflow读取大数据集的方法,tf.train.string_input_producer()和tf.train.slice_input_producer()

    1. https://blog.csdn.net/qq_41427568/article/details/85801579

  10. mysql---级联更新和删除操作

    我们通常有这样的需求:删除表Table 1中记录,需要同时删除其它表中与Table 1有关的若干记录. 对于这种,我们有两种解决方法: 一,使用innodb表的外键约束 ALTER TABLE `sc ...