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