数据库操作工具类

这是一个通用的数据库操作工具类,提供连接池初始化、多种数据库类型的连接、执行SQL(增删改查)、批量执行SQL以及关闭连接的方法。适用于sqlserver和ORACLE数据库。
摘要由CSDN通过智能技术生成

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.ResourceBundle;
import org.apache.commons.dbcp.BasicDataSource;

/**
 * 本类作为一个通用的工具类,提供相关的数据库方面通用操作方法。
 * @author lukmao
 * @category 工具类
 * @version 1.0
 * @since 2013-08-14
 */
public class DatabaseUtil {
 
 /**
  * 使用sqlserver数据库MERLIA驱动
  */
 public static final int TYPE_MERLIA = 1;
 
 /**
  * 使用sqlserver数据库微软的驱动
  */
 public static final int TYPE_MICROSOFT = 2;
 
 /**
  * 使用ORACLE数据库ORACLE驱动
  */
 public static final int TYPE_ORACLE = 3;
 
 /**
  * 使用ORACLE数据库ORACLE驱动
  */
 public static final int BATCH_DEFAULT = 10000;
 
 private static Connection conn;
 private static BasicDataSource oDS = null;
 
 /**
  * 通过数据库验证信息从连接池获取连接
  * @param username                数据库连接的用户名
  * @param password                数据库连接的密码
  * @param server                  数据库所在服务器
  * @param database                数据库名
  * @param type                    数据库驱动类型(1,)
  * @return                        数据库连接
  * @throws SQLException           数据库操作异常
  * @throws ClassNotFoundException 类找不到异常
  */
 public static void initConnection(String username,String password,String server,String database, Integer type) throws SQLException, ClassNotFoundException{
  String driver = null;
  String url = null;
  if(type== null || type == TYPE_MERLIA){
   driver = "com.inet.tds.TdsDriver";
   url = "jdbc:inetdae7:"  + server + "?database=" + database;
  }else if(type == TYPE_MICROSOFT){
   driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
   url = "jdbc:sqlserver://" + server + ":1433;DatabaseName=" + database;
  }else{
   driver = "oracle.jdbc.driver.OracleDriver";
   url = "jdbc:oracle:thin:@" + server + ":1521:" + database;
  }
  
  if (oDS == null){
   Class.forName(driver);
   oDS = new BasicDataSource();
   oDS.setDriverClassName(driver);
   oDS.setUsername(username);
   oDS.setPassword(password);
   oDS.setUrl(url);
   oDS.setMaxActive(200);
   oDS.setMaxIdle(10);
   oDS.setMaxWait(60000);
   oDS.setTestOnBorrow(true);
   oDS.setValidationQuery("SELECT 1");  
  }
  conn = oDS.getConnection();
 }
 
 /**
  * 通过资源文件(ResourceBundle)获取数据库连接
  * @param resource_bundle         资源文件
  * @param type                    数据库驱动类型
  * @return                        数据库连接
  * @throws SQLException           数据库操作异常
  * @throws ClassNotFoundException 类找不到异常
  */
 public static void initConnection(ResourceBundle resource_bundle, int type) throws SQLException, ClassNotFoundException{
  String username = resource_bundle.getString("username");
  String password = resource_bundle.getString("password");
  String server = resource_bundle.getString("server");
  String database = resource_bundle.getString("database");
  initConnection(username, password, server, database,type);
 }
 
 /**
  * 通过资源文件名获取数据库连接
  * @param filename                资源文件名
  * @param type                    数据库驱动类型
  * @return                        数据库连接
  * @throws SQLException           数据库操作异常
  * @throws ClassNotFoundException 类找不到异常
  */
 public static void initConnection(String filename,int type) throws SQLException, ClassNotFoundException{
  initConnection(ResourceBundle.getBundle(filename),type);
 }
 
 /**
  * 数据库增加删除修改操作
  * @param sql           执行sql命令
  * @param params        参数类表
  * @throws SQLException 数据库操作异常
  */
 public static void execute(String sql, List<String> params) throws SQLException{
  if(conn == null){
   System.out.println("please init connection first!");
   return;
  }
  PreparedStatement ps = conn.prepareStatement(sql);
  if(params != null){
   int i = 1;
   for(String param : params){
    ps.setString(i++, param);
   }
  }
  ps.execute();
  
  if(ps != null){
   ps.close();
  }
 }
 
 /**
  * 数据库增加删除修改操作
  * @param sql           执行sql命令
  * @param params        参数类表
  * @throws SQLException 数据库操作异常
  */
 public static ResultSet executeQuery(String sSQL, List<String> params) throws ClassNotFoundException, SQLException, Exception {
  if(conn == null){
   System.out.println("please init connection first!");
   return null;
  }
  ResultSet oResultSet = null;
  PreparedStatement ps = conn.prepareStatement(sSQL);
  if(params != null){
   int i = 1;
   for(String param : params){
    ps.setString(i++, param);
   }
  }
  oResultSet = ps.executeQuery();
  
  if(ps != null){
   ps.close();
  }
  
  return oResultSet;
 }
 
 /**
  * 数据库增加删除修改操作,批量执行
  * @param sql           执行sql命令
  * @param params        sql参数集的集合,集合内为单条命令的参数集。
  * @throws SQLException 数据库操作异常
  */
 public static void executeBatch(String sql,List<List<String>> params) throws SQLException{
  if(conn == null){
   System.out.println("please init connection first!");
   return;
  }
  PreparedStatement ps = conn.prepareStatement(sql);
  if(params != null){
   for(List<String> lparam : params){
    int i = 1;
    for(String param : lparam){
     ps.setString(i++, param);
    }
    ps.addBatch();
   }
   ps.executeBatch();
  }
  
  if(ps != null){
   ps.close();
  }
 }
 
 /**
  * 释放连接
  * @throws SQLException
  */
 public void close() throws SQLException{
  if(conn != null){
   if(!conn.isClosed()){
    conn.close();
   }
  }
 }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值