?? jdbop.java
字號(hào):
* @param rst 要轉(zhuǎn)換的結(jié)果集
* @return 成功時(shí)返回向量,否則返回null;
* @throws Exception 拋出所有錯(cuò)誤
*/
public Vector rst2HashVector(ResultSet rst) {
try {
Vector vRst = new Vector();
//獲取表頭信息
ResultSetMetaData rstm = rst.getMetaData();
//System.out.println("getmeta");
int colcount = rstm.getColumnCount(), i;
String colname[] = new String[colcount];
//形成字段名數(shù)組
for (i=1; i<=colcount; i++)
colname[i-1] = rstm.getColumnName(i); //字段名從1開(kāi)始,數(shù)組應(yīng)從0開(kāi)始
//System.out.println("cr field");
//形成記錄集,從矢量的索引1開(kāi)始
rst.beforeFirst();
while (rst.next())
{HashMap hm = new HashMap();
for (i=0; i<colcount; i++)
hm.put(colname[i],rst.getString(i+1));
vRst.addElement(hm);
}
rst.beforeFirst();
return vRst;
}catch (Exception e) {
return null;
}
}
/**
* 返回當(dāng)前紀(jì)錄的哈希映射。
* @param rst 包括當(dāng)前紀(jì)錄的結(jié)果集。
* @return 成功時(shí)返回當(dāng)前紀(jì)錄的哈希映射,如果結(jié)果集的光標(biāo)在第一條記錄之前,自返回第一條紀(jì)錄。失敗時(shí)返回null。
*/
public HashMap recMap(ResultSet rst) {
try {
if (rst.isBeforeFirst())
rst.next();
//獲取表頭信息
ResultSetMetaData rstm = rst.getMetaData();
int colcount = rstm.getColumnCount(), i;
String colname[] = new String[colcount];
//形成字段名數(shù)組
for (i=1; i<=colcount; i++)
colname[i-1] = rstm.getColumnName(i); //字段名從1開(kāi)始,數(shù)組應(yīng)從0開(kāi)始
//形成記錄集,從矢量的索引1開(kāi)始
HashMap hm = new HashMap();
for (i=0; i<colcount; i++)
hm.put(colname[i],rst.getString(i+1));
return hm;
}catch (Exception e) {
e.printStackTrace();
m_errMsg = "recMap error: " + e;
return null;
}
}
/**
* 返回與結(jié)果集相關(guān)的字段定義
* @param rst: 要抽取定義的結(jié)果集
* @return 返回的向量定義包含的數(shù)據(jù)均為FieldDef類(lèi)型,只有字段名、字段類(lèi)型、和字段長(zhǎng)度被返回,失敗時(shí)返回空
*/
public Vector getFieldsDef(ResultSet rst) {
m_errMsg = "";
try {
Vector vFields = new Vector();
//獲取表頭信息
ResultSetMetaData rstm = rst.getMetaData();
//System.out.println("getmeta");
int colcount = rstm.getColumnCount(), i;
//形成字段名數(shù)組
for (i=1; i<=colcount; i++) {
FieldDefn fd = new FieldDefn();
fd.colName = rstm.getColumnName(i); //字段名從1開(kāi)始
fd.colType = rstm.getColumnType(i);
fd.colLen = rstm.getPrecision(i);
vFields.add(fd);
// vFields.addElement(new Integer(rstm.getPrecision(i)));
}
return vFields;
}catch (Exception e) {
m_errMsg =this.getClass().getName() + ".getFieldsDef(): " + e;
System.out.println(m_errMsg);
return null;
}
}
/**
* 添加批處理語(yǔ)句,本函數(shù)與getData使用相同的會(huì)話(huà)句柄
* @param sqlStr: 要添加的語(yǔ)句
* @return 成功時(shí)返回true, 否則返回false
*/
public boolean addBatchSql(String sqlStr) {
try {
if (autoCommit) {
//設(shè)置事務(wù)開(kāi)始,在exeBatch中激發(fā)事務(wù),并關(guān)閉自動(dòng)執(zhí)行
autoCommit = false;
m_conn.setAutoCommit(false);
}
m_statement.addBatch(sqlStr);
return true;
}catch (Exception e) {
m_errMsg =this.getClass().getName() + ".addBatchSql(): " + e;
System.out.println(m_errMsg);
return false;
}
}
/**
* 執(zhí)行批處理程序
* @return 成功時(shí)返回每一條語(yǔ)句的的狀態(tài)值數(shù)組,否則返回null
*/
public int [] exeBatchSql() throws Exception{
try{
int[] ret;
ret = m_statement.executeBatch();
autoCommit = true; //開(kāi)啟自動(dòng)執(zhí)行
m_conn.setAutoCommit(true);
m_conn.commit();
return ret;
}catch (Exception e) {
m_errMsg =this.getClass().getName() + ".exeBatchSql(): " + e;
m_errMsg += "\n事務(wù)被回滾.";
m_conn.rollback();
autoCommit = true; //開(kāi)啟自動(dòng)執(zhí)行
m_conn.setAutoCommit(true);
System.out.println(m_errMsg);
return null;
}
}
/**
* 修改一條紀(jì)錄,該方法可以用來(lái)更新和刪除紀(jì)錄
* @param String sql 進(jìn)行操作的sql語(yǔ)句
* @return boolean 操作成功返回 TRUE,否則返回 FALSE
*/
public boolean simpleUpdate (String sql) throws Exception
{
m_errMsg = "";
try {
if(m_conn == null)
connect();
Statement stmt = m_conn.createStatement();
boolean rt = stmt.execute(sql);
stmt.close();
return true;
}
catch(Exception e)
{
m_errMsg =this.getClass().getName() + ".exeSql(): " + e;
System.out.println(m_errMsg);
return false;
}
}
/**
* 獲取錯(cuò)誤信息
*/
public String getErrMsg() {
return m_errMsg;
}
/**
* 創(chuàng)建數(shù)據(jù)庫(kù)
* @param dbName: 要建的數(shù)據(jù)庫(kù)名
* @return 如果創(chuàng)建成功,則返回true并將當(dāng)前數(shù)據(jù)庫(kù)連接指向新的數(shù)據(jù)庫(kù),否則返回false
*/
public boolean createDataBase(String dbName) {
m_errMsg = "";
try {
exeSql("Create DataBase " + dbName);
m_conn.setCatalog(dbName);
return true;
}catch (Exception e) {
m_errMsg =this.getClass().getName() + ".createDataBase(): " + e;
System.out.println(m_errMsg);
return false;
}
}
/**
* 設(shè)置數(shù)據(jù)庫(kù)對(duì)象的自動(dòng)銷(xiāo)毀方式
* @param autoClose: 為true時(shí)自動(dòng)關(guān)閉聯(lián)接,這也是缺省方式
*/
public void setAutoClose(boolean autoClose) {
preDbObj.setAutoClose(autoClose);
}
public void finalize() {
/**@todo: Override this java.lang.Object method*/
}
/**
* 插入一條記錄 added by wujian
* @return boolean 操作成功返回 TRUE,否則返回 FALSE
* @param String table 表名
* @param Map recordMap 字段名稱(chēng)及取值
*/
public boolean insert(String table,
Map recordMap) throws SQLException, Exception
{
if(m_conn==null) connect();
Statement statement = m_conn.createStatement();
String field="", value="", mfields="", mvalues="";
Iterator itf = recordMap.keySet().iterator();
while(itf.hasNext()) {
field = (String)itf.next();
value = (String)recordMap.get(field);
value = value==null ? "":value;
mfields += field + ",";
mvalues += "'" + value + "',";
}
mfields = mfields.substring(0, mfields.length() - 1);
mvalues = mvalues.substring(0, mvalues.length() - 1);
String mySql = "INSERT INTO " + table + "("
+ mfields + ") VALUES(" + mvalues + ")";
System.out.println(mySql);
statement.execute(mySql);
return true;
}
/**
* 按照不同的數(shù)據(jù)庫(kù)類(lèi)型轉(zhuǎn)換數(shù)據(jù)庫(kù)調(diào)用函數(shù)。由于不同數(shù)據(jù)庫(kù)可能有相同功能的函數(shù),但調(diào)用名稱(chēng)和方法不同,本函數(shù)將對(duì)其進(jìn)行轉(zhuǎn)換。
* 本函數(shù)只能用于CERP系統(tǒng)
* @param funcExp 要轉(zhuǎn)換的函數(shù)表達(dá)式
* @return 成功時(shí)返回轉(zhuǎn)換后的函數(shù)表達(dá)式,否則返回null
*/
public String convertDbFunc(String funcExp) {
m_errMsg="";
try {
return funcExp;
}catch (Exception e) {
e.printStackTrace();
m_errMsg = "convertDbFunc: " + e;
return null;
}
}
/**
* 按照不同的數(shù)據(jù)庫(kù)類(lèi)型轉(zhuǎn)換數(shù)據(jù)庫(kù)調(diào)用函數(shù)。由于不同數(shù)據(jù)庫(kù)可能有相同功能的函數(shù),但調(diào)用名稱(chēng)和方法不同,本函數(shù)將對(duì)其進(jìn)行轉(zhuǎn)換。
* 本函數(shù)只能用于CERP系統(tǒng)
* @param funcExp 要轉(zhuǎn)換的函數(shù)表達(dá)式
* @param dbName 數(shù)據(jù)庫(kù)名,它必須是JdbOp定義的DBNAME常數(shù)的一部分
* @return
*/
public static String convertDbFunc(String funcExp,int dbName) {
try {
return funcExp;
}catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 刪除一條記錄
* @return boolean 操作成功返回 TRUE,否則返回 FALSE
* @param String table 表名
* @param String criteria 篩選條件
*/
public boolean deleteBatch(String table, String criteria)
{m_errMsg = "";
try {
if(m_conn==null) connect();
Statement statement = m_conn.createStatement();
addBatchSql("DELETE FROM " + table + " WHERE " + criteria);
return true;
}
catch(Exception e) {
// disConnect();
System.out.println(e.toString());
return false;
}
}
/**
* 插入一條記錄 added by wujian
* @return boolean 操作成功返回 TRUE,否則返回 FALSE
* @param String table 表名
* @param Map recordMap 字段名稱(chēng)及取值
*/
public boolean insertBatch(String table,
Map recordMap) throws SQLException, Exception
{
if(m_conn==null) connect();
Statement statement = m_conn.createStatement();
String field="", value="", mfields="", mvalues="";
Iterator itf = recordMap.keySet().iterator();
while(itf.hasNext()) {
field = (String)itf.next();
value = (String)recordMap.get(field);
value = value==null ? "":value;
mfields += field + ",";
mvalues += "'" + value + "',";
}
mfields = mfields.substring(0, mfields.length() - 1);
mvalues = mvalues.substring(0, mvalues.length() - 1);
String mySql = "INSERT INTO " + table + "("
+ mfields + ") VALUES(" + mvalues + ")";
// System.out.println(mySql);
addBatchSql(mySql);
return true;
}
}//end of class
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -