1. 程式人生 > >JavaWeb常用工具類:資料庫操作DataSourceUtils

JavaWeb常用工具類:資料庫操作DataSourceUtils

操作資料庫,本程式碼參考的是我看的視訊。。。。

資料庫技術:c3p0 也就是說要使用這個工具類你必須引入C3p0的jar包和配置檔案
先自行百度吧我有時間就傳上來、、
直接先上程式碼:

public class DataSourceUtils {
private static ComboPooledDataSource ds = new ComboPooledDataSource();
private static ThreadLocal<Connection> tl=new ThreadLocal<>();

/**
 * 從執行緒中獲取連線
 * @return
 * @throws SQLException
 */
public static Connection getConnection() throws SQLException {
    //從執行緒中獲取conneciton
    Connection conn = tl.get();
    if(conn==null){
        conn=ds.getConnection();
        //和當前執行緒繫結
        tl.set(conn);
    }
    return conn;
}

// 獲取資料來源
public static DataSource getDataSource() {
    return ds;
}

// 釋放資源
public static void closeResource( Statement st, ResultSet rs) {
    closeResultSet(rs);
    closeStatement(st);
}

// 釋放資源
public static void closeResource(Connection conn, Statement st, ResultSet rs) {
    closeResource(st, rs);
    closeConn(conn);
}

// 釋放 connection
public static void closeConn(Connection conn) {
    if (conn != null) {
        try {
            conn.close();
            //和執行緒解綁
            tl.remove();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        conn = null;
    }
}

// 釋放 statement ctrl + shift + f 格式化程式碼
public static void closeStatement(Statement st) {
    if (st != null) {
        try {
            st.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        st = null;
    }
}

// 釋放結果集
public static void closeResultSet(ResultSet rs) {
    if (rs != null) {
        try {
            rs.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        rs = null;
    }
}


//開啟事務
public static void startTransaction() throws SQLException{
    getConnection().setAutoCommit(false);
}

/**
 * 事務提交且釋放連線
 */
public static void commitAndClose(){
    Connection conn = null;
    try {
        conn=getConnection();
        //事務提交
        conn.commit();
        //關閉資源
        conn.close();
        //解除版定
        tl.remove();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

/**
 * 事務回滾且釋放資源
 */
public static void rollbackAndClose(){
    Connection conn = null;
    try {
        conn=getConnection();
        //事務回滾
        conn.rollback();
        //關閉資源
        conn.close();
        //解除版定
        tl.remove();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

}

經常使用的是獲取資料連線

使用方法:
如在Dao層實現與資料庫的互動:

//獲取連結  通過工具類
    QueryRunner qr=new QueryRunner(DataSourceUtils.getDataSource());
    String sql="insert into user values(?,?,?,?,?,?,?,?,?,?)";

    qr.update(sql, user.getUid(),user.getUsername(),user.getPassword(),
            user.getName(),user.getEmail(),user.getTelephone(),
            user.getBirthday(),user.getSex(),user.getState(),user.getCode());

解釋: sql語句根據需求改變,返回型別也根據需求改變