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

来源:互联网 发布:2016年气象数据 编辑:程序博客网 时间:2024/06/05 07:55

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

一、数据库的连接,常用的方式有直接将那些要连接的参数放到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 blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.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);//trueSystem.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) {}}






原创粉丝点击