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

05-06 03:59
查看更多