package com.conant.ums.db;
import java.sql.*;
import java.util.Vector;
import com.conant.ums.util.*;
/**
* <p>
*˵�������������ݿ���ʽӿ�DataBaseAcc�ĸ��࣬���ṩ�����ݿ����ӵĻ���API��
*</p>
*<p>
*���ڣ�
*���ߣ�
*</p>
**/
public class DbAccess {
//private static Hashtable htPara = new Hashtable();
private DataSourcePara mDataSourcePara = null;
private JdbcPara mJdbcPara = null;
private BytesConverter mConverter = null;
Object oPara = null;
private String mKey = null;
private String paraKey = null;
protected Statement mStmt;
protected ResultSet mRs;
protected int mErrorCode = 0;
//Connection
public DbAccess() {
this.mKey = "";
_init(this.mKey);
}
public DbAccess(String key) {
this.mKey = key;
_init(this.mKey);
}
private void _init(String key) {
String dbKey;
if (key == null || key == "") {
dbKey = "__Default__";
}
else {
dbKey = key;
}
oPara = DbConfig.getPara(key);
if (oPara instanceof DataSourcePara) {
mDataSourcePara = (DataSourcePara) oPara;
mConverter = new BytesConverter(mDataSourcePara.ConvertInDbFrom,
mDataSourcePara.ConvertInDbTo,
mDataSourcePara.ConvertOutDbFrom,
mDataSourcePara.ConvertOutDbTo);
}
else {
mJdbcPara = (JdbcPara) oPara;
mConverter = new BytesConverter(mJdbcPara.ConvertInDbFrom,
mJdbcPara.ConvertInDbTo,
mJdbcPara.ConvertOutDbFrom,
mJdbcPara.ConvertOutDbTo);
}
}
/* public Connection connect() {
//Object oPara = null;
//Connection mConn = null;
if (oPara instanceof DataSourcePara) {
mConn = DbConnection.connectDataSource(mDataSourcePara);
}else {
mConn = DbConnection.connectJdbc(mJdbcPara);
}
try {
mConn.setAutoCommit(true);
}catch (SQLException e) {
Log.error(e.getMessage());
//throw new SQLException ("QUERY ERR:"+sql);
}
return mConn;
}*/
//�������ò�������ȡһ�����Ӷ���
public static Connection getConnect(String sKey) {
Object dbPara = DbConfig.getPara(sKey);
Connection oConn = null;
if (dbPara instanceof DataSourcePara) {
oConn = DbConnection.connectDataSource( (DataSourcePara) dbPara);
}
else {
oConn = DbConnection.connectJdbc( (JdbcPara) dbPara);
}
return oConn;
}
//query
public ResultSet query(Connection mConn, String sqlIn) {
Log.debug("SQL INPUT:" + sqlIn);
String sql = mConverter.convertInDb(sqlIn);
Log.debug("SQL STMT:" + sql);
try {
mStmt = mConn.createStatement();
mRs = mStmt.executeQuery(sql);
}
catch (SQLException e) {
Log.error(e.getMessage());
//throw new SQLException ("QUERY ERR:"+sql);
}
return mRs;
}
public Vector vquery(Connection mConn, String sqlIn) {
Log.debug("SQL INPUT:" + sqlIn);
String sql = mConverter.convertInDb(sqlIn);
Log.debug("SQL STMT:" + sql);
try {
mStmt = mConn.createStatement();
mRs = mStmt.executeQuery(sql);
ResultSetMetaData rsm = mRs.getMetaData();
int count = rsm.getColumnCount();
Vector v = new Vector();
//��������
Vector vHead = new Vector(count);
for (int i = 1; i <= count; i++) {
vHead.add(rsm.getColumnName(i));
}
Log.debug("vHead:" + vHead.toString());
v.addElement(vHead);
int r = 0;
while (mRs.next()) {
Object[] obj = new Object[count];
for (int i = 1; i <= count; i++) {
obj[i - 1] = mRs.getObject(i);
Log.debug("Data[" + r + "][" + i + "]:" + obj[i -
1].toString());
}
v.addElement(obj);
r++;
}
if (mRs != null) {
mRs.close();
}
if (mStmt != null) {
mStmt.close();
}
mErrorCode = 0;
return v;
}
catch (SQLException e) {
Log.error("TAE: " + e.getMessage());
}
return null;
}
/**
* ��Vector�а�����ȡ����
*/
public static Object getField(Vector vData, String colName, int rowNum) {
if (rowNum < 1) {
return null;
}
if (! (vData.get(0) instanceof java.util.Vector)) {
return null;
}
Vector vHead = (Vector) vData.get(0);
int iCol = vHead.indexOf(colName.toUpperCase());
if (iCol < 0) {
return null;
}
Object[] rowData = (Object[]) vData.get(rowNum);
if (rowData.length > iCol) {
return rowData[iCol];
}
return null;
}
//execute
public int execute(Connection mConn, String sqlIn) throws SQLException {
Log.debug("SQL INPUT:" + sqlIn);
String sql = mConverter.convertInDb(sqlIn);
Log.debug("SQL STMT:" + sql);
int count = 0;
try {
mStmt = mConn.createStatement();
count = mStmt.executeUpdate(sql);
// mConn.commit();
if (mStmt != null) {
mStmt.close();
}
return count;
}
catch (SQLException e) {
Log.error("TAE: " + e.getMessage());
throw e;
}
} //end execute
/**
* �˷���ִ����ɾ�ĵ��û�����Ķ��SQL��䡣
* @param strSQL[]Ϊһ��SQL������顣
* @param int[]Ϊִ�к�Ӱ������ݿ��¼���������������顣
* @throws {@link DataBaseException}
*/
public int[] executeBatch(Connection mConn, String[] strSQL) {
int[] result = null;
try {
mStmt = mConn.createStatement();
for (int i = 0; i < strSQL.length; i++) {
String sql = mConverter.convertInDb(strSQL[i]);
mStmt.addBatch(sql);
Log.debug("BatchSQL[" + i + "]=" + sql);
}
result = mStmt.executeBatch();
if (mStmt != null) {
mStmt.close();
}
}
catch (SQLException e) {
Log.error("TAE: " + e.getMessage());
}
for (int i = 0; i < result.length; i++) {
Log.debug("SQL Execute[" + i + "]=" + strSQL[i] + " rows= " +
result[i]);
}
return result;
}
//insert
//close
public void close() {
try {
if (mRs != null) {
mRs.close();
}
if (mStmt != null) {
mStmt.close();
}
//m_con.close();
}
catch (SQLException e) {
Log.error("TAE: " + e.getMessage());
}
} //close
public String convertInDb(String strIn) {
return (mConverter.convertInDb(strIn));
}
public String convertOutDb(String strIn) {
return (mConverter.convertOutDb(strIn));
}
public static void main(String[] args) {
System.out.println("Begin test");
DbAccess mDbAccess = new DbAccess();
Connection objConn = DbAccess.getConnect("");
String tableName = "personInfo";
String tableCol = "*";
String sql = "select " + tableCol + " from " + tableName;
Vector v = mDbAccess.vquery(objConn, sql);
try {
if (objConn != null) {
objConn.commit();
objConn.close();
}
}
catch (Exception e) {
Log.error("TAE: " + e.getMessage());
}
System.out.println("Out = " + v);
}
}