Java封裝JDBC數據庫增、刪、改、查操作成JAR文件,以供Web工程調用,適用於多種數據庫
廢話不多說,直接上源代碼,最後有使用方法,當然,也可以作為普通公用類使用,只是封裝成JAR更方便使用。
[java] view plain copy
- package db.util;
- import java.io.BufferedReader;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStreamReader;
- import java.sql.CallableStatement;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.json.JSONObject;
- /*
- * 說明:封裝JDBC數據庫增刪改查、存儲過程
- * 作者:Jiro.Chen
- * 時間:2016-12-12 15:13:54
- * */
- public class ConnectionUtil {
- private static String DRIVER = null;
- private static String URL = null;
- private static String USERNAME = null;
- private static String PASSWORD = null;
- private Connection conn = null;
- private PreparedStatement pstmt = null;
- private CallableStatement callableStatement = null;
- private ResultSet resultSet = null;
- private void init(){
- try {
- Class.forName(DRIVER);
- } catch (ClassNotFoundException e) {
- System.out.println("加載驅動錯誤");
- System.out.println(e.getMessage());
- }
- }
- public ConnectionUtil(String dbParam){
- String path = getCurrentPath();
- String filePath = path + "\\db.JSON";
- String text = null;
- try{
- text = this.readFile(new File(filePath));
- if(text.equals(null) || text.equals("")){
- filePath = path + "\\db.json";
- text = this.readFile(new File(filePath));
- if(text.equals(null) || text.equals("")){
- System.out.println("找不到指定文件");
- }
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- JSONObject json = new JSONObject(text);
- JSONObject DB = json.getJSONObject(dbParam);
- DRIVER = DB.getString("DRIVER");
- URL = DB.getString("URL");
- USERNAME = DB.getString("USERNAME");
- PASSWORD = DB.getString("PASSWORD");
- this.init();
- }
- private String readFile(File file){
- String text = null;
- try{
- if(file.isFile() && file.exists()){
- InputStreamReader read = new InputStreamReader(new FileInputStream(file),"UTF-8");
- BufferedReader bufferedReader = new BufferedReader(read);
- String lineTxt = null;
- while((lineTxt = bufferedReader.readLine()) != null){
- text += lineTxt;
- }
- read.close();
- }
- }catch(Exception e){
- e.printStackTrace();
- }
- return text;
- }
- private String getCurrentPath(){
- String rootPath = null;
- java.net.URL url = ConnectionUtil.class.getProtectionDomain().getCodeSource().getLocation();
- String filePath = null;
- try{
- filePath = java.net.URLDecoder.decode(url.getPath(), "utf-8");
- }catch (Exception e) {
- e.printStackTrace();
- }
- if(filePath.endsWith(".jar")){
- filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
- }
- java.io.File file = new java.io.File(filePath);
- rootPath = file.getAbsolutePath();
- rootPath = rootPath.substring(0, rootPath.lastIndexOf("\\"));
- rootPath += "\\classes";
- return rootPath;
- }
- public Connection getConnection(){
- try{
- conn = DriverManager.getConnection(URL, USERNAME,
- PASSWORD);
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }
- return conn;
- }
- public int executeUpdate(String sql, Object[] params){
- int affectedLine = 0;
- try{
- conn = this.getConnection();
- pstmt = conn.prepareStatement(sql);
- if (params != null){
- for (int i = 0; i < params.length; i++){
- pstmt.setObject(i + 1, params[i]);
- }
- }
- affectedLine = pstmt.executeUpdate();
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }finally {
- closeAll();
- }
- return affectedLine;
- }
- /**
- * SQL 查詢將查詢結果直接放入ResultSet中
- */
- private ResultSet executeQueryRS(String sql, Object[] params){
- try{
- conn = this.getConnection();
- pstmt = conn.prepareStatement(sql);
- if (params != null){
- for (int i = 0; i < params.length; i++){
- pstmt.setObject(i + 1, params[i]);
- }
- }
- resultSet = pstmt.executeQuery();
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }
- return resultSet;
- }
- /**
- * 獲取結果集,並將結果放在List中
- */
- public List<Object> excuteQuery(String sql, Object[] params){
- ResultSet rs = executeQueryRS(sql, params);
- ResultSetMetaData rsmd = null;
- int columnCount = 0;
- try{
- rsmd = rs.getMetaData();
- columnCount = rsmd.getColumnCount();
- }catch (SQLException e1) {
- System.out.println(e1.getMessage());
- }
- List<Object> list = new ArrayList<Object>();
- try{
- while (rs.next()) {
- Map<String, Object> map = new HashMap<String, Object>();
- for (int i = 1; i <= columnCount; i++) {
- map.put(rsmd.getColumnLabel(i), rs.getObject(i));
- }
- list.add(map);
- }
- }catch (SQLException e) {
- System.out.println(e.getMessage());
- }finally {
- closeAll();
- }
- return list;
- }
- /**
- * 存儲過程帶有一個輸出參數的方法
- * @param sql 存儲過程語句
- * @param params 參數數組
- * @param outParamPos 輸出參數位置
- * @param SqlType 輸出參數類型
- * @return 輸出參數的值
- */
- public Object excuteQuery(String sql, Object[] params,int outParamPos, int SqlType){
- Object object = null;
- conn = this.getConnection();
- try{
- callableStatement = conn.prepareCall(sql);
- if(params != null){
- for(int i = 0; i < params.length; i++) {
- callableStatement.setObject(i + 1, params[i]);
- }
- }
- callableStatement.registerOutParameter(outParamPos, SqlType);
- callableStatement.execute();
- object = callableStatement.getObject(outParamPos);
- }catch (SQLException e){
- System.out.println(e.getMessage());
- }finally{
- closeAll();
- }
- return object;
- }
- private void closeAll(){
- if (resultSet != null){
- try {
- resultSet.close();
- } catch (SQLException e){
- System.out.println(e.getMessage());
- }
- }
- if(pstmt != null){
- try{
- pstmt.close();
- } catch (SQLException e){
- System.out.println(e.getMessage());
- }
- }
- if(callableStatement != null){
- try{
- callableStatement.close();
- }catch (SQLException e) {
- System.out.println(e.getMessage());
- }
- }
- if(conn != null){
- try{
- conn.close();
- } catch (SQLException e) {
- System.out.println(e.getMessage());
- }
- }
- }
- }
使用方法:
在Web工程src目錄下新建db.JSON或者db.json文件
[plain] view plain copy
- {
- "DB":{
- "DRIVER" :"com.microsoft.sqlserver.jdbc.SQLServerDriver",
- "URL" :"jdbc:sqlserver://223.68.143.21:12922;DatabaseName=TwRailway_ECP",
- "USERNAME":"sa",
- "PASSWORD":"senao"
- }
- }
其中,DB可以有多個
工程導入JAR包之後,通過
[java] view plain copy
- 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工程調用,適用於多種數據庫