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