常用公共类代码一之数据库的连接

在项目中,我们经常会写到一些公共的代码,来让开发人员调用,减少代码重复,下面,我就将一些常用到的公共类贴出来和大家分享!!

一、数据库的连接,常用的方式有直接将那些要连接的参数放到java类中、将连接参数放到Properties文件中或者放到XML文件中,下面一一为大家描述

1、直接连接:

        普通的配置方式
	public static Connection getConnection(){
		Connection conn=null;
		try {
			Class.forName("com.mysql.jdbc.Driver");
			String url="jdbc:mysql://127.0.0.1:3306/xinyuandb";
			String username="root";
			String password="123456";
			conn=DriverManager.getConnection(url, username, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}

2、通过Properties文件创建连接,好处,很灵活,不用在代码里面进行更改

  创建jdbc.properties文件

  driver=com.mysql.jdbc.Driver
  url=jdbc\:mysql\://127.0.0.1\:3306/xinyuandb
  username=root
  password=123456

        从properties文件中读取
	public static Connection getConnection(){
		Connection conn=null;
		Properties p=new Properties();
		try {
			//从当前线程加载
			p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.properties"));
			Class.forName(p.getProperty("driver"));
			conn=DriverManager.getConnection(p.getProperty("url"), p.getProperty("username"), p.getProperty("password"));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}

3、通过XML文件读取
  创建jdbc.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<config>
    <jdbc-config>
      <driver>com.mysql.jdbc.Driver</driver>
      <url>jdbc:mysql://127.0.0.1:3306/xinyuandb</url>
      <username>root</username>
      <password>123456</password>
    </jdbc-config>
</config>
创建javaBean类
package com.common.db;

public class JdbcBean {
    private String driver;
    private String url;
    private String username;
    private String password;
    public String getDriver() {
        return driver;
    }
    public void setDriver(String driver) {
        this.driver = driver;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

创建XML解析类
package com.common.db;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class XmlConfigReader {
	private static XmlConfigReader instance;
	private JdbcBean bean=null;
	//调用构造函数进行XML文件解析
	private XmlConfigReader(){
		SAXReader reader=new SAXReader();
		try {
			Document doc=reader.read(Thread.currentThread().getContextClassLoader().getResourceAsStream("jdbc.xml"));
			Element root=doc.getRootElement();
			Element first=root.element("jdbc-config");
			String driver=first.element("driver").getText();
			String url=first.element("url").getText();
			String username=first.element("username").getText();
			String password=first.element("password").getText();
			bean=new JdbcBean();
			bean.setDriver(driver);
			bean.setUrl(url);
			bean.setUsername(username);
			bean.setPassword(password);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	
	public synchronized static XmlConfigReader getInstance(){
		if(instance==null){
			instance=new XmlConfigReader();
		}
		return instance;
	}
	
	public JdbcBean getJdbeanBean(){
		return bean;
	}

}

// 从XML文件中读取配置取得同一Connection
//    static Connection conn=null;
//    static{
//        JdbcBean jdbc=XmlConfigReader.getInstance().getJdbeanBean();
//        try {
//            Class.forName(jdbc.getDriver());
//            conn=DriverManager.getConnection(jdbc.getUrl(), jdbc.getUsername(),jdbc.getPassword());
//        } catch (ClassNotFoundException e) {
//            e.printStackTrace();
//        } catch (SQLException e) {
//            e.printStackTrace();
//        }
//    }

    //从XML文件中读取配置
    public static Connection getConnection(){
        Connection conn=null;
        JdbcBean jdbc=XmlConfigReader.getInstance().getJdbeanBean();
        try {
            Class.forName(jdbc.getDriver());
            conn=DriverManager.getConnection(jdbc.getUrl(), jdbc.getUsername(),jdbc.getPassword());
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }


有时候我们想取得Connection的单实例,又不会影响到其安全性,我们可以通过线程ThreadLocal来对Connection进行管理:

package com.common.db;

import java.sql.Connection;

/**
 * 线程管理
 * @author Administrator
 *
 */
public class ConnectionManager {
	//使用线程变量对Connection进行管理
	private static ThreadLocal<Connection> local=new ThreadLocal<Connection>();
	
	public static Connection getConnection(){
		Connection conn=local.get();
		if(conn==null){
			conn=DbUtil.getConnection();
			local.set(conn);
		}
		return conn;
	}
	public static void main(String[] args) {
		Connection conn1=ConnectionManager.getConnection();
		Connection conn2=ConnectionManager.getConnection();
		Connection conn3=DbUtil.getConnection();
		Connection conn4=DbUtil.getConnection();
		System.out.println(conn1==conn2);//true
		System.out.println(conn3==conn4);//false
	}
}

这样,数据库操作的公共类基本上实现了,大家在项目中就可以进行调用了,当然,还有一些基本的流的关闭和事物的处理,代码如下:

       public static void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void close(Statement pstmt) {
		if (pstmt != null) {
			try {
				pstmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void close(ResultSet rs ) {
		if (rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public static void beginTransaction(Connection conn) {
		try {
			if (conn != null) {
				if (conn.getAutoCommit()) {
					conn.setAutoCommit(false); //手动提交
				}
			}
		}catch(SQLException e) {}
	}
				
	public static void commitTransaction(Connection conn) {
		try {
			if (conn != null) {
				if (!conn.getAutoCommit()) {
					conn.commit();
				}
			}
		}catch(SQLException e) {}
	}
	
	public static void rollbackTransaction(Connection conn) {
		try {
			if (conn != null) {
				if (!conn.getAutoCommit()) {
					conn.rollback();
				}
			}
		}catch(SQLException e) {}
	}
	
	public static void resetConnection(Connection conn) {
		try {
			if (conn != null) {
				if (conn.getAutoCommit()) {
					conn.setAutoCommit(false);
				}else {
					conn.setAutoCommit(true);
				}
			}
		}catch(SQLException e) {}
	}






  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值