ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 一个简单的JDBC包装类

一个简单的JDBC包装类

原创 Linux操作系统 作者:orlando 时间:2010-03-18 00:21:33 0 删除 编辑
前一段时间项目上需要一个JDBC的包装类,上网找了找也没有找到合适的,所以就自己写了一个。
当然还有一些功能有待增加,比如不支持数据库连接池等等,以后再逐步完善了。
 
/**
 * DBHelper works as JDBC wrapper class to simplify JDBC operations.
 * @author orlando
 * @version 0.1
 */
package com.orlando.Common;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Properties;
import java.util.Map.Entry;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
import oracle.jdbc.OraclePreparedStatement;
 
public class DBHelper {
 private static Connection conn = null;
 private static OraclePreparedStatement pstmt = null;
 private static Statement stmt = null;
 private static String logFilename;
 
 private static Logger log = Logger.getLogger(DBHelper.class.getName());
 
 /**
  * Initiate the logger variable including specifying the log filename.
  */
 private static void logEnv() throws IOException{
  FileHandler logfile = new FileHandler(logFilename, true);
  SimpleFormatter formatTxt = new SimpleFormatter();
  logfile.setFormatter(formatTxt);
  log.addHandler(logfile);
 }
 /**
  * Query and return Database connection information configured in property file.
  * @param aURL Oracle database URL of the form
  * @param user the database user used to connect database
  * @param password the user's password
  */
 private static void readProperties (StringBuffer aURI, StringBuffer aUser, StringBuffer aPwd) throws IOException{
  InputStream inputStream = DBHelperTest.class.getResourceAsStream("/DBConnection.properties");
  Properties p = new Properties();
  p.load(inputStream);
  aURI.append(p.getProperty("DBUri").toString());
  aUser.append(p.getProperty("UserName").toString());
  aPwd.append(p.getProperty("Password").toString());
  logFilename = p.getProperty("Logfile").toString();
 }
 /**
  * Create a new Oracle connection or return the current connection
  */
 public static boolean createConnection()
 {
  StringBuffer uri = new StringBuffer();
  StringBuffer user = new StringBuffer();
  StringBuffer password = new StringBuffer();
  if (conn == null) {
   try {
    logEnv();
    readProperties(uri, user, password);
    log.info("Connecting to database");
    DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
    conn = DriverManager.getConnection(uri.toString(),
      user.toString(),
      password.toString());
   
   } catch (IOException e) {
    e.printStackTrace();
    return false;
   } catch (SQLException e) {
    log.severe("database connection failed: " + e.getMessage());
    return false;
   }
  }
  return true;
 }
 
 /**
  * Release the connection with Oracle database.
  */
 public static void DBClose() {
  try {
   log.info("Close connection with database");
   if (pstmt != null) {
    pstmt.close();
   }
   if (stmt != null) {
    stmt.close();
   }
  } catch (SQLException e) {
   log.severe("Close statements failed: " + e.getMessage());
  } finally {
   if (conn != null) {
    try {
     conn.close();
    } catch (SQLException e) {
     log.severe("Close database connection failed: " + e.getMessage());
    }
   }
  }
 }
 /**
  * This method is optimized for handling parametric SQL statements that benefit from precompilation.
  * @param aSQL SQL statement
  * @param aParams Parameters and values used for SQL statement.
  */
 public static ArrayList> preparedStatement(String aSQL, HashMap aParams) {
  String fieldName;
  String fieldValue;
  HashMap rowEntity;
  ArrayList> resultSetList = new ArrayList>();
  Entry mapEntry;
  try {
   pstmt = (OraclePreparedStatement)conn.prepareStatement(aSQL);
   Iterator> mapIter = aParams.entrySet().iterator();
   while (mapIter.hasNext()) {
    mapEntry = (Entry) mapIter.next();
    fieldName = (String) mapEntry.getKey();
    fieldValue = (String) mapEntry.getValue();
    pstmt.setStringAtName(fieldName, fieldValue);
   }
   //retrieve the query result.
   ResultSet rslt = pstmt.executeQuery();
   while (rslt.next()) {
    rowEntity = new HashMap();
    for (int i=1; i <= rslt.getMetaData().getColumnCount();i++){
     rowEntity.put(rslt.getMetaData().getColumnLabel(i), rslt.getString(i));
    }
    resultSetList.add(rowEntity);
   }
   rslt.close();
   pstmt.close();
   return resultSetList;
  } catch (SQLException e) {
   log.severe("Execute SQL statement failed: " + e.getMessage());
   return null;
  }
 }
 
 /**
  * Execute Select SQL statement on database.
  * @param aSQL SQL statement
  */
 public static ArrayList> StatementQuery(String aSQL) {
  HashMap rowEntity;
  ArrayList> resultSetList = new ArrayList>();
  try {
   stmt = conn.createStatement();
   ResultSet rslt = stmt.executeQuery(aSQL);
   while (rslt.next()) {
    rowEntity = new HashMap();
    for (int i=1; i <= rslt.getMetaData().getColumnCount();i++){
     rowEntity.put(rslt.getMetaData().getColumnLabel(i), rslt.getString(i));
    }
    resultSetList.add(rowEntity);
   }
   rslt.close();
   stmt.close();
   return resultSetList;
  } catch (SQLException e) {
   log.severe("Execute SQL statement failed: " + e.getMessage());
   return null;
  }
 }
 /**
  * Execute Update, Delete and Insert SQL statement on database.
  * @param aSQL SQL statement
  * @return the row count for SQL Data Manipulation Language (DML) statements
  */
 public static int StatementUpdate(String aSQL) {
  try {
   stmt = conn.createStatement();
   int rowCount = stmt.executeUpdate(aSQL);
   stmt.close();
   return rowCount;
  } catch (SQLException e) {
   log.severe("Execute SQL statement failed: " + e.getMessage());
   return 0;
  }
 }
 /**
  * Make all changed updated to database in current session.
  */
 public static void commit() {
  try {
   conn.commit();
  } catch (SQLException e) {
   log.severe("Database commit failed: " + e.getMessage());
  }
 }
 
 /**
  * Undoes all changed to database in current session.
  */
 public static void rollback() {
  try {
   conn.rollback();
  } catch (SQLException e) {
   log.severe("Database rollback failed: " + e.getMessage());
  }
 }
 
}
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/51146/viewspace-629765/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-11-23

  • 博文量
    11
  • 访问量
    31904