通用的Java MySQL JDBC主从分离操作工具类

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
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;
    }  
}

标签: Mysql 服务器 服务器地址 数据库

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:Python抓取文件夹的所有文件,包括子文件夹和子文件夹的文件

下一篇: 自动同步服务器vm文件的shell脚本