java數據庫 DBHelper

package com.dangdang.msg.dbutil;

import com.dangdang.msg.configure.*;
import com.mysql.jdbc.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import org.apache.log4j.Logger;

/**
 * mysql 的數據類,只包含數據庫創建,nosql的執行
 * 
 * @author 李朋飛
 */

public class DBHelper {
    /**
     * 獲取數據庫的鏈接
     * 
     * @return 返回conn,
     */
    public static Logger logger;
    private static Connection conn = null;

    public static void getConnection() {
        logger = Logger.getLogger(DBHelper.class);
        try {
            Class.forName(Config.dbConfig.getDbdriver()).newInstance(); // 加載數據庫驅動
            conn = (Connection) DriverManager.getConnection(
                    Config.dbConfig.getDbhost(), Config.dbConfig.getUser(),
                    Config.dbConfig.getPassword());
            conn.setAutoCommit(false);
        } catch (ClassNotFoundException e) {
            logger.error("未找到類:" + Config.dbConfig.getDbdriver(), e);
        } catch (SQLException e) {
            logger.error("沒法鏈接數據庫", e);
        } catch (Exception e) {
            logger.error("其餘異常", e);
        }
    }

    public static boolean commitJob() {
        try {
            conn.commit();
            return true;
        } catch (SQLException e) {
            logger.error("commit error!");
            return false;
        }
    }

    public static Connection getConn() {
        // 若超時,或者鏈接中斷
        if (true == isConnOutTime())
            getConnection();
        return conn;
    }

    /**
     * 判斷數據庫鏈接是否未超時
     * isConnection
     * return boolean true,則未超時,不然超時
     */

    private static boolean isConnOutTime() {
        try {
            // 若未初始化鏈接,則鏈接初始化
            if (conn == null || conn.isClosed() == true)
                return true;
            // ping ,查看是否鏈接超時
            if (conn instanceof com.mysql.jdbc.Connection) {
                conn.ping();
            }
        } catch (SQLException e) {
            logger.error("鏈接超時", e);
            return true;
        }
        return true;
    }

    /**
     * 增刪改【Add、Del、Update】
     * 
     * @param sql
     *            須要執行的SQL語句
     * @return int 返回是否成功,若失敗,則返回-1,若成功,但未修改數據庫,則返回0,不然返回正整數
     */

    public static int executeNonQuery(String sql) throws SQLException {
        int result = 0;
        Statement stmt = null;
        stmt = conn.createStatement();
        result = stmt.executeUpdate(sql);
        return result;
    }

    /**
     * 查詢SQL語句,預期結果爲一個String數組,返回結果
     * 
     * @param sql
     *            所要執行的sql語句
     * @return 返回值爲預期結果
     * @throws SQLException
     *             SQL執行錯誤異常
     */
    public static String getString(String sql) throws SQLException {

        Statement stmt = null;
        ResultSet rs = null;
        String ret = null;

        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        if (false == rs.wasNull() && rs.next())
            ret = rs.getString(1);
        return ret;
    }

    /**
     * 查詢SQL語句,該SQL語句返回結果包含多行一列,返回該列
     * 
     * @param sql
     *            須要主席邢的sql語句
     * @return 返回值爲ArrayList
     * @throws SQLException
     *             拋出sql異常
     */
    public static ArrayList<String> getList(String sql) throws SQLException {
        Statement stmt = null;
        ResultSet rs = null;
        ArrayList<String> ret = new ArrayList<String>();
        stmt = conn.createStatement();
        rs = stmt.executeQuery(sql);
        if (rs.wasNull())
            return null;
        while (rs.next())
            ret.add(rs.getString(1));

        return ret;
    }
}
相關文章
相關標籤/搜索