Java通用JDBC连接Mysql(快速在SAE、BAE上使用)

为什么80%的码农都做不了架构师?>>>   hot3.png

package com.matol.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;
import java.util.logging.Logger;
import java.util.logging.Level;

public final class MySqlDB {
  	public static Logger log = Logger.getLogger("MySqlDB.class");
  
	//参数配置
	public static String name= "matol";
	public static String pass= "matol";
	public static String driver= "com.mysql.jdbc.Driver";
	
	//主库连接  jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码
	public static String urlM= "jdbc:mysql://sqld.duapp.com:4050/matol?useUnicode=true&characterEncoding=utf-8"; 
	//从库连接  jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码
	public static String urlS= "jdbc:mysql://sqld.duapp.com:4050/matol?useUnicode=true&characterEncoding=utf-8"; 
	
  	//初始化
	private MySqlDB(){}
  	//注册驱动  
  	static {
        try {  
            Class.forName(driver);  
        } catch (Exception e) {  
          	log.log(Level.INFO, "#Error - 注册驱动(Class.forName): "+e.getMessage());
            System.out.println("#Error log["+e.getMessage()+"]");
        }  
    }
	
	//数据库连接、操作、结果集
	public static Connection conM;  //主库连接  
	public static Connection conS;  //从库连接
	public static Statement st;  
	public static ResultSet rs;  
	
	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 static Connection getConnection(int ms) {  
        try {
        	//从库,进行查询操作
        	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) {  
          	log.log(Level.INFO, "#Error - 获取主从库(getConnection): log["+e.getMessage()+"]");
           	System.out.println("#Error log["+e.getMessage()+"]");
        }  
        //默认主库
        return conM;
    }  
    
    
    /*
     * 执行一条新增、删除、修改操作 
     */
    public static int insertOrUpdate(String sql) {  
      	log.log(Level.INFO, "MySqlDB - 执行一条新增、删除、修改操作(insertOrUpdate): "+sql);
        int count =0;  
      	Connection con = null;
      	Statement sts = null;
        try {  
        	con = DriverManager.getConnection(urlM, name, pass);
        	sts = con.createStatement();  
            count = sts.executeUpdate(sql); 
        } catch (Exception e) {  
          	log.log(Level.INFO, "#Error - 执行一条新增、删除、修改操作(insertOrUpdate): log["+e.getMessage()+"]");
        	System.out.println("#Error log["+e.getMessage()+"]"); 
        } finally{ 
          	try {
            if (sts != null) { 
                sts.close(); 
                sts = null; 
            } 
            if (con != null) { 
                con.close(); 
                con = null; 
            } 
        	}catch (Exception es) {}
        } 
        
        return count;  
    }  

    /*
     * 执行一条查询类SQL,返回多条记录集 
     */
    public static List getList(String sql) {  
      	log.log(Level.INFO, "MySqlDB - 执行一条查询类SQL,返回多条记录集(getList): "+sql);
        List list = null;    
      	Connection con = null;
      	Statement sts = null;
      	ResultSet rss = null;
        try {  
        	con = DriverManager.getConnection(urlM, name, pass);
        	sts = con.createStatement();  
        	rss = sts.executeQuery(sql);  
            if(rss != null){
            	ResultSetMetaData md = rss.getMetaData(); //得到结果集(rs)的结构信息,比如字段数、字段名等     
                int count = md.getColumnCount(); //返回此 ResultSet 对象中的列数 
                
                Map map = null;   
                list = new ArrayList();
                while (rss.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), rss.getObject(i));     
                	}     
                	list.add(map);        
                }     
            } 
        } catch(Exception e) {  
          	log.log(Level.INFO, "#Error - 执行一条查询类SQL,返回多条记录集(getList): log["+e.getMessage()+"]");  
        	System.out.println("#Error log["+e.getMessage()+"]");  
        } finally{ 
          	try {
            if (rss != null) { 
                rss.close(); 
                rss = null; 
            }               
            if (sts != null) { 
                sts.close(); 
                sts = null; 
            } 
            if (con != null) { 
                con.close(); 
                con = null; 
            } 
        	}catch (Exception es) {}
        } 
        
        return list;
    }  
    
    /*
     * 执行一条查询类SQL,返回单条记录集 
     */
    public static Map getObject(String sql) {  
      	log.log(Level.INFO, "MySqlDB - 执行一条查询类SQL,返回单条记录集(getObject): "+sql);
        Map map = null;
      	Connection con = null;
      	Statement sts = null;
      	ResultSet rss = null;      
        try {  
        	con = DriverManager.getConnection(urlM, name, pass);
        	sts = con.createStatement();  
        	rss = sts.executeQuery(sql);   
            if(rss != null){
            	ResultSetMetaData md = rss.getMetaData(); //得到结果集(rs)的结构信息,比如字段数、字段名等     
                int count = md.getColumnCount(); //返回此 ResultSet 对象中的列数 
                
                map = new HashMap();     
                if(rss.next()) {        
                	for(int i = 1; i <= count; i++) {    
                		//System.out.println("#Log ["+md.getColumnName(i)+"] ["+rs.getObject(i)+"]");
                		map.put(md.getColumnName(i), rss.getObject(i));     
                	}           
                }     
            } 
        } catch (Exception e) {  
          	log.log(Level.INFO, "#Error - 执行一条查询类SQL,返回单条记录集(getObject): log["+e.getMessage()+"]");
        	System.out.println("#Error log["+e.getMessage()+"]");   
        }finally{ 
          	try {
            if (rss != null) { 
                rss.close(); 
                rss = null; 
            }               
            if (sts != null) { 
                sts.close(); 
                sts = null; 
            } 
            if (con != null) { 
                con.close(); 
                con = null; 
            } 
        	}catch (Exception es) {}
        } 
        
        return map;
    }  
}


转载于:https://my.oschina.net/matol/blog/187977

你可能感兴趣的:(Java通用JDBC连接Mysql(快速在SAE、BAE上使用))