废话不多说,直接上源代码,最后有使用方法,当然,也可以作为普通公用类使用,只是封装成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. Iconv作用以及安装问题解决

    当我们在使用Window操作系统的时候,可能使用最多的文本格式就是txt了,但是当我们将Window平台下的txt文本文档拷贝到Linux平台下查看时,发现原来的中文全部变成了乱码.没错, 引起这个结 ...

  2. Maximum of lines in a DataBand

    Hello! I have a problem.I have a DataBand, but I need it to grow only up to 14 lines. If it is beyon ...

  3. cpupower:Shows and sets processor power related values

    软件包: * sys-power/cpupower Latest version available: Latest version installed: Size of files: KiB Hom ...

  4. Daily Life——团队冲刺博客——(领航篇)

    目录 领航目标 各个成员在 Alpha 阶段认领的任务 各个成员的具体任务安排 整个项目预期的任务量 团队成员贡献值的计算规则 燃尽图 Daily Life团队冲刺博客 领航目标 各个成员在 Alph ...

  5. Embedding和Word2Vec实战

    在之前的文章中谈到了文本向量化的一些基本原理和概念,本文将介绍Word2Vec的代码实现 https://www.cnblogs.com/dogecheng/p/11470196.html#Word2 ...

  6. 一些关于SEO优化的笔记

    高级搜索指令: 双引号:“xxx” 代表完全匹配的搜索 减号:-(减号前面必须是空格,后面必须没有空格)代表搜索不包含减号后面的词的页面 filetype:用于搜索特定文件格式(百度支持的文件类型:P ...

  7. PostgreSQL 荣获 2019 年 O'Reilly 终身成就奖

    Java技术栈 www.javastack.cn 优秀的Java技术公众号 来自:开源中国社区 https://www.oschina.net/news/108436/pg-wins-2019-ore ...

  8. ELK+filebeat+redis 日志分析平台

    一.简介 ELK Stack是软件集合Elasticsearch.Logstash.Kibana的简称,由这三个软件及其相关的组件可以打造大规模日志实时处理系统. 其中,Elasticsearch 是 ...

  9. opencv图像的基本操作3

    1.获取像素并修改 读取一副图像,根据像素的行和列的坐标获取它的像素值,对于RGB图像而言,返回RGB的值,对于灰度图则返回灰度值 import cv2 import numpy img = cv2. ...

  10. Nginx四层负载均衡

    目录 Nginx四层负载均衡概述 Nginx如何配置四层负载均衡 使用nginx四层负载均衡实现tcp的转发 Nginx四层负载均衡概述 什么是四层负载均衡 四层负载均衡是基于传输层协议包来封装的(如 ...