1. 程式人生 > >Java封裝JDBC數據庫增、刪、改、查操作成JAR文件,以供Web工程調用,適用於多種數據庫

Java封裝JDBC數據庫增、刪、改、查操作成JAR文件,以供Web工程調用,適用於多種數據庫

通過 ive trac end 使用方法 數據 div bstr 工程

廢話不多說,直接上源代碼,最後有使用方法,當然,也可以作為普通公用類使用,只是封裝成JAR更方便使用。

[java] view plain copy
  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文件

[plain] view plain copy
  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包之後,通過

[java] view plain copy
  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工程調用,適用於多種數據庫