废话不多说,直接上源代码,最后有使用方法,当然,也可以作为普通公用类使用,只是封装成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. [Flask] 异步非阻塞IO实现

    Flask默认是不支持非阻塞IO的,表现为: 当 请求1未完成之前,请求2是需要等待处理状态,效率非常低. 在flask中非阻塞实现可以由2种: 启用flask多线程机制 # Flask from f ...

  2. 目前写出的bug

    要检测p->next 与p都不=NULL while(p->next!=NULL &&p!=NULL) 会导致访问access NULL pointer的runtime错误 ...

  3. Ajax的那点事

    Ajax中什么是同步.异步? 同步:就是用户填写完信息之后,全部提交给服务器,等待服务器的回应,是一次性全部的. 异步:当用户填写完一条信息之后,这条信息会自动向服务器提交,然后服务器响应客户端,在此 ...

  4. 利用Graphziv帮助理解复杂的类层次关系

    最近在学习osg三维视景仿真平台,学习的过程中涉及到许多的类与类之间的继承和包含关系.在复杂点的例子中,许多的类和节点组合在一起,很容易让人迷失方向.在编译源代码的时候,无意间发现了Graphviz这 ...

  5. Cocos2d-x之String

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 在Cocos2d-x中能够使用的字符串constchar*.std::string和cocos2d::__String等,其中const ...

  6. Bentley二次开发中的,沿曲线构造拉伸实体问题

    引用文件:Bentley.Interop.MicroStationDGN 本人开发过程中遇到问题: 创建多个线段及弧线,通过自动创建复杂链获得,沿曲线构造拉伸实体的Path参数,拉伸曲线路径首尾特别近 ...

  7. .eslintrc.js相关配置

    module.exports = { root: true, //此项是用来指定javaScript语言类型和风格,sourceType用来指定js导入的方式,默认是script,此处设置为modul ...

  8. QT下载与安装

    1.下载地址:https://www.qt.io/download-open-source/ 2.qt5.5:http://download.qt.io/development_releases/qt ...

  9. APACHE两种域名跳转法简单完成重定向

    当我们变更网站域名,或者申请多个域名指向一个网站的时候,这个时候我们就会用到域名跳转(或者叫域名重定向redirect.域名转向).下面用最简单的文字讲两种apache的域名跳转方法. 假设我们想把w ...

  10. HDU 5159 Card( 计数 期望 )

    Card Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...