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; } }