通用的Java MySQL JDBC主從分離操作工具類

nwx8 9年前發布 | 5K 次閱讀 Java JDBC MySQL

package com.mms.db;

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

public class MySqlDB { //初始化 private MySqlDB(){}

//參數配置
public static String name= "root";
public static String pass= "root";
public static String driver= "com.mysql.jdbc.Driver";

//主庫連接  jdbc:mysql//服務器地址/數據庫名 ,后面的2個參數分別是登陸用戶名和密碼
public static String urlM= "jdbc:mysql://localhost:3306/matoldb?useUnicode=true&characterEncoding=utf-8"; 
//從庫連接  jdbc:mysql//服務器地址/數據庫名 ,后面的2個參數分別是登陸用戶名和密碼
public static String urlS= "jdbc:mysql://localhost:3306/matoldb?useUnicode=true&characterEncoding=utf-8"; 


//數據庫連接、操作、結果集
public static Connection conM;  //主庫連接  
public static Connection conS;  //從庫連接
public static Statement st;  
public static ResultSet rs;  
public static int isNewDriver;  //是否注冊數據庫連接驅動類

public static void main(String[] args) {
    //System.out.println("#Log ["+MySqlDB.getConnection()+"]");

    //MySqlDB.insertOrUpdate("delete from mi_socket where id = 1");

    //MySqlDB.getList("SELECT * from mi_socket LIMIT 0,1");
    //MySqlDB.getObject("SELECT * from mi_socket where id = 1");
}


/*
 * 根據主從庫標識,返回相應的主從庫連接。 0主庫 1從庫
 */
private synchronized static Connection getConnection(int ms) {  
    try {
        //數據庫驅動只注冊一次
        if(isNewDriver == 0){
            Class.forName(driver).newInstance();
            isNewDriver = 1;
        }

        //從庫,進行查詢操作
        if(ms == 1){
            if(conS == null){
                conS = DriverManager.getConnection(urlS, name, pass);
            }
            return conS;
        }
        //主庫,進行增、刪、改、(查)操作
        else{  
            if(conM == null){
                conM = DriverManager.getConnection(urlM, name, pass);
            }
            return conM;
        }
    } catch (Exception e) {  
       System.out.println("#Error log["+e.getMessage()+"]");
    }  
    //默認主庫
    return conM;
} 


/*
 * 執行一條新增、刪除、修改操作 
 */
public synchronized static int insertOrUpdate(String sql) {  
    getConnection(0); 
    int count =0;  
    try {  
        st = conM.createStatement();  
        count = st.executeUpdate(sql);  
    } catch (Exception e) {  
        System.out.println("#Error log["+e.getMessage()+"]"); 
    } finally{  
        try {  
            if (st != null) {  
                st.close();  
                st = null;  
            }  
            if (conM != null) {  
                conM.close();  
                conM = null;  
            }  
        } catch (Exception e2) {  
            System.out.println("#Error log["+e2.getMessage()+"]"); 
        }  
    }  
    return count;  
}  

/*
 * 執行一條查詢類SQL,返回多條記錄集 
 */
public synchronized static List<Map> getList(String sql) {  
    getConnection(1);

    List<Map> list = null;    
    try {  
        st = conS.createStatement();  
        rs = st.executeQuery(sql);  
        if(rs != null){
            ResultSetMetaData md = rs.getMetaData(); //得到結果集(rs)的結構信息,比如字段數、字段名等     
            int count = md.getColumnCount(); //返回此 ResultSet 對象中的列數 

            Map map = null;   
            list = new ArrayList<Map>();
            while (rs.next()) {     
                map = new HashMap();     
                for(int i = 1; i <= count; i++) {    
                    //System.out.println("#Log ["+md.getColumnName(i)+"] ["+rs.getObject(i)+"]");
                    map.put(md.getColumnName(i), rs.getObject(i));     
                }     
                list.add(map);        
            }     
        } 
    } catch(Exception e) {  
        System.out.println("#Error log["+e.getMessage()+"]");  
    } finally{  
        try {  
            if (st != null) {  
                st.close();  
                st = null;  
            }  
            if (rs != null) {  
                rs.close();  
                rs = null;  
            }  
        } catch (Exception e2) {  
            System.out.println("#Error log["+e2.getMessage()+"]"); 
        }  
    } 

    return list;
}  

/*
 * 執行一條查詢類SQL,返回單條記錄集 
 */
public synchronized static Map getObject(String sql) {  
    getConnection(1); 

    Map map = null;
    try {  
        st = conS.createStatement();  
        rs = st.executeQuery(sql);  
        if(rs != null){
            ResultSetMetaData md = rs.getMetaData(); //得到結果集(rs)的結構信息,比如字段數、字段名等     
            int count = md.getColumnCount(); //返回此 ResultSet 對象中的列數 

            map = new HashMap();     
            if(rs.next()) {        
                for(int i = 1; i <= count; i++) {    
                    //System.out.println("#Log ["+md.getColumnName(i)+"] ["+rs.getObject(i)+"]");
                    map.put(md.getColumnName(i), rs.getObject(i));     
                }           
            }     
        } 
    } catch (Exception e) {  
        System.out.println("#Error log["+e.getMessage()+"]");   
    } finally{  
        try {  
            if (st != null) {  
                st.close();  
                st = null;  
            }  
            if (rs != null) {  
                rs.close();  
                rs = null;  
            }                
        } catch (Exception e2) {  
            System.out.println("#Error log["+e2.getMessage()+"]");   
        }  
    } 

    return map;
}  

}</pre>

 本文由用戶 nwx8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!