英特內軟體股份有限公司


jcx.db
Class talk

java.lang.Object
  |
  +--jcx.db.talk
All Implemented Interfaces:
java.lang.Runnable, java.io.Serializable

public class talk
extends java.lang.Object
implements java.lang.Runnable, java.io.Serializable

此類別talk,為存取DB Server元件,在使用前先請確認已安裝jdbc相關driver.

目前支援資料庫含

 使用方法:在目前目錄下(通常是JC目錄),建立talk.cfg 檔案,內容如下:
 uid=myid           (帳號)
 pwd=mypassword     (密碼)
 port=5000          (DB port)
 max_connections=10 (Connection pool的最大對DB連接數)
 type=sybase        (DB Server 類型,可使用參數有:sybase,oracle,db2,mssql,mysql,cloudscape,informix)
 sid=SMS            (default database,SID)
 history=100        (記錄的 SQL history數量)
 
 ------------------------------------------------------------------------ 
 以下這份文件是用來記錄程式設計時,牽涉到SQL的相關問題.
 [select的傳回資料判斷及使用]
 example:
 1.sql="select XXX,YYY,ZZZ from XYZ where XXX='xxx' and YYY='yyy' and ZZZ='zzz'";
 2.String ret[][]=talk.sendmsgx("selectx",sql);
 3.if(ret.length==0)
 4.{
 5.	no data;
 6.}
 7.else
 8.{
 9.	if(check.check_db(ret).equals(""))
 10.	{
 11.		show data;
 12.	}
 13.	else
 14.	{
 15.		show sql error message,ex:invaild column name...;
 16.	}
 17.}
 
 explain:
 select指令執行後,傳回之資訊判斷方式一般是這樣的一個形式,
 範例第3至6行是表示此次select找不到符合條件之資料,
 第7至17行則是有傳回資訊的情況,
 但有可能是SQL錯誤訊息,而不是我們想要的資料,
 因此第9至12行的判斷是當這些資訊的內容不是SQL的錯誤訊息,
 check_db(ret)傳回空字串,
 我們可以繼續處理所得到的資料,例如將之show在畫面上,
 然而當check_db(ret)傳回非空字串之內容時,就表示select有問題,
 第13至16行是對此錯誤訊息作一個處理.
 
 [iud(insert,update,delete)的傳回資料判斷及使用]
 example:
 1.sql="delete from XYZ where XXX='xxx' and YYY='yyy' and ZZZ='zzz'";//以delete的動作為例
 2.String ret=talk.sendmsg("exec",sql);
 3.if(check.check_db(ret).equals(""))
 4.{
 5.	IUD complete successfully;
 6.}
 7.else
 8.{
 9.	IUD fail;
 10.	show sql error message,ex:SQL command not properly ended;
 11.}
 
 explain:
 UID時傳回的資訊正常時為其所影響之資料筆數,
 否則就是SQL錯誤訊息,第3至6行是指令正確執行完畢的情形.
 所以check.check_db(ret)傳回空字串,
 我們就可以告知使用者,動作成功的訊息,
 而第7至11行則是有SQL錯誤訊息產生的情形,
 所以必須告知使用者,這個動作失敗,
 有必要的話,可以附上SQL錯誤訊息的內容或其他事項.
 
 ------------------------------------------------------------------------ 
 以下這份文件是用來處理對資料庫的Transaction問題.
 資料庫的Transaction處理必須慎重處理,若有不慎,極易導致lock.
 請仔細閱讀以下範例
 (建議採用int[] sendmsg("exec",String[]);)
 
 explain:
 // create a new connection to db with talk.cfg (自己獨佔,所以用完後儘快釋放掉)
 talk t=new talk();
 try{
 int ret1=t.execute("insert into a values(1,'first row')");
 int ret2=t.execute("update b set ID='jony'");
 if(ret2==0){ // 沒有update到資料
 t.rollback();
 } else {
 // 資料皆正常異動
 t.commit();
 }
 } catch(SQLException e){ t.rollback(); }
 t.close();
 

See Also:
Serialized Form

Field Summary
 int callback_step
           
 
Constructor Summary
talk()
          取得DB的Transaction通道,SQL指令全部結束後,一定要立即呼叫close().
talk(java.lang.String db_type, java.lang.String ip, java.lang.String uid, java.lang.String pwd, java.lang.String sid)
          產生對DB的connection pool,與talk.cfg無關.
talk(java.lang.String db_type, java.lang.String ip, java.lang.String uid, java.lang.String pwd, java.lang.String sid, int max_connections)
          /** 產生對DB的connection pool,與talk.cfg無關.
talk(java.lang.String db_type, java.lang.String ip, java.lang.String uid, java.lang.String pwd, java.lang.String sid, int max_connections, int timeout)
          產生對DB的connection pool,與talk.cfg無關.
talk(java.lang.String db_type, java.lang.String ip, java.lang.String uid, java.lang.String pwd, java.lang.String sid, java.lang.String db_enc, java.lang.String ap_enc)
          產生對DB的connection pool,與talk.cfg無關.
 
Method Summary
 void backup(java.lang.String path)
          備份SQL的資料.
 void begin()
          begin Transaction.
static java.util.Vector call(java.lang.String sp, java.util.Vector v)
          執行SQL Store Procedure.
static java.util.Vector call(java.lang.String sp, java.util.Vector v, java.lang.String cfgfile)
          執行SQL Store Procedure.
 java.util.Vector callFromPool(java.lang.String sp, java.util.Vector v)
          執行SQL Store Procedure.
 java.util.Vector callFunctionFromPool(java.lang.String sp, java.util.Vector v)
          執行SQLfunction.
 void close()
          結束資料庫連線.
static void closeALL()
          結束對DB的Transaction.
 void commit()
          commit Transaction.
 java.lang.String execFromPool(java.lang.String sql)
          執行SQL異動指令.
 int[] execFromPool(java.lang.String[] sql)
          在同一個Transaction範圍內執行SQL異動指令.
 int[] execFromPool(java.lang.String[] sql, java.lang.Object[][] parameter)
          執行SQL異動指令,使用prepareStatement.
 java.lang.String execFromPool(java.lang.String sql, java.lang.Object[] parameter)
          執行SQL異動指令,使用prepareStatement.
 int execute(java.lang.String sql)
          在Transaction範圍內執行SQL指令.
 int exportFromPool(java.lang.String s, java.lang.String filename, boolean include_scheme, java.lang.String where)
          匯出SQL的資料.
 java.lang.String[] getCatalogsFromPool()
          查詢資料庫的Schemas.
static java.lang.String[][] getColumns(java.lang.String sql)
          查詢table的欄位資料. ret[i][0]: column name ret[i][1]: column type ret[i][2]: column type name ret[i][3]: column prec ret[i][4]: column scale ret[i][5]: column length
static java.lang.String[][] getColumns(java.lang.String sql, java.lang.String cfgfile)
          查詢 table 的欄位資料.
 java.lang.String[][] getColumnsFromPool(java.lang.String sql)
           
 java.sql.Connection getConnectionFromPool()
          取得java.sql.connection物件(只適用於server端程式).
static java.util.Vector getHistory()
          查詢執行過的SQL指令.
static java.lang.String getInfo()
          查詢connection pool status.
 java.lang.String[] getObjectsFromPool(java.lang.String pattern, java.lang.String type)
          查詢資料庫的物件.
 java.lang.String[][] getSqlTypes()
          查詢table的欄位資料.
static java.lang.String[] getTables(java.lang.String pattern)
          查詢資料庫的table.
static java.lang.String[] getTables(java.lang.String pattern, java.lang.String cfgfile)
          查詢資料庫的table.
 java.lang.String[] getTablesFromPool(java.lang.String pattern)
          查詢資料庫的table.
static talk getTalk(java.lang.String filename, java.lang.String name)
          取得專案設定的talk.
 int getTimeout()
          取得talk的timeout(ms).
 int importFromPool(java.lang.String s, java.lang.String filename, boolean recreate_table)
          匯入SQL的資料.
 boolean isUnicodeEncoding()
          判斷目前的talk object的字串是否為UNICODE編碼.
 java.lang.String[][] query(java.lang.String sql)
          在Transaction範圍內執行SQL查詢指令.
 java.lang.String[][] queryFromPool(java.lang.String sql)
          執行SQL查詢指令.
 java.lang.String[][] queryFromPool(java.lang.String sql, int start, int rows)
          執行SQL查詢指令(區間,僅適用於DMaker).
 java.lang.String[][] queryFromPool(java.lang.String sql, long timeout)
          執行SQL 查詢指令(有cache功能).
 java.lang.String[][] queryFromPool(java.lang.String sql, long timeout, java.lang.String TAG)
          執行SQL查詢指令(有cache功能).
 java.lang.String[][] queryFromPool(java.lang.String sql, java.lang.Object[] parameter)
          執行SQL查詢指令(preparestatement).
 java.lang.String[][] queryFromPool(java.lang.String sql, java.lang.Object[] parameter, boolean with_cache)
           
 java.lang.String[][] queryFromPool(java.lang.String sql, java.lang.Object[] parameter, long timeout)
          執行SQL 查詢指令(有cache功能).
 java.lang.String[][] queryFromPool(java.lang.String sql, java.lang.Object[] parameter, long timeout, java.lang.String TAG)
          執行SQL查詢指令(有cache功能).
 java.util.Hashtable queryHashtable(java.lang.String sql, int index)
          執行 SQL 查詢指令(執行結果會依照指定的KEY放在Hashtable).
 void restore(java.lang.String path)
          還原 SQL 的資料.
 void rollback()
          rollback Transaction.
 void run()
           
 void scheme(java.lang.String path)
          比對 SQL 的scheme資料.
static java.lang.String sendmsg(java.lang.String s1, java.lang.String s2)
          執行SQL指令.
static int[] sendmsg(java.lang.String s1, java.lang.String[] update_sqls)
          執行transaction的SQL指令.
static java.lang.String sendmsg(java.lang.String s1, java.lang.String s2, java.lang.Object[] parameter)
           
static java.lang.String sendmsg(java.lang.String s1, java.lang.String s2, java.lang.Object[] parameter, java.lang.String cfgfile)
          執行SQL指令(preparestatement).
static java.lang.String sendmsg(java.lang.String s1, java.lang.String s2, java.lang.String cfgfile)
          執行SQL指令.
static java.lang.String[][] sendmsgx(java.lang.String[] guardium, java.lang.String s1, java.lang.String s2, java.lang.String cfgfile)
          執行SQL指令(guardium).
static java.lang.String[][] sendmsgx(java.lang.String s1, java.lang.String s2)
          執行SQL指令.
static java.lang.String[][] sendmsgx(java.lang.String s1, java.lang.String s2, java.lang.Object[] parameter)
           
static java.lang.String[][] sendmsgx(java.lang.String s1, java.lang.String s2, java.lang.Object[] parameter, java.lang.String cfgfile)
          執行SQL指令,use Preparestatement.
static java.lang.String[][] sendmsgx(java.lang.String s1, java.lang.String s2, java.lang.String cfgfile)
          執行SQL指令.
static java.lang.String[][] sendmsgx(java.lang.String s1, java.lang.String s2, java.lang.String cfgfile, int timeout)
          執行SQL指令.
 void setSQLTimeout(int timeout)
           
 void setTimeout(int timeout)
          設定talk的timeout(ms),預設值為 60000(60秒).
static int transfer(java.lang.String sql1, java.lang.String sql2, java.lang.String type1, java.lang.String ip1, java.lang.String port1, java.lang.String id1, java.lang.String pwd1, java.lang.String sid1, java.lang.String type2, java.lang.String ip2, java.lang.String port2, java.lang.String id2, java.lang.String pwd2, java.lang.String sid2)
          轉換異質資料庫資料.
static int transfer(java.lang.String sql1, java.lang.String sql2, java.lang.String type1, java.lang.String ip1, java.lang.String port1, java.lang.String id1, java.lang.String pwd1, java.lang.String sid1, java.lang.String type2, java.lang.String ip2, java.lang.String port2, java.lang.String id2, java.lang.String pwd2, java.lang.String sid2, java.lang.String source_enc, java.lang.String dest_enc)
          轉換異質資料庫資料.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

callback_step

public int callback_step
Constructor Detail

talk

public talk(java.lang.String db_type,
            java.lang.String ip,
            java.lang.String uid,
            java.lang.String pwd,
            java.lang.String sid)
產生對DB的connection pool,與talk.cfg無關.

因此指令也不使用sendmsg,改採

Parameters:
db_type - 資料庫種類(mssql,oracle,sybase...).
ip - 資料庫位址.
uid - 帳號.
pwd - 密碼.
sid - 預設資料庫.
Throws:
SQLException,ClassNotFoundException -  

talk

public talk(java.lang.String db_type,
            java.lang.String ip,
            java.lang.String uid,
            java.lang.String pwd,
            java.lang.String sid,
            java.lang.String db_enc,
            java.lang.String ap_enc)
產生對DB的connection pool,與talk.cfg無關.

因此指令也不使用sendmsg,改採

Parameters:
db_type - 資料庫種類(mssql,oracle,sybase...).
ip - 資料庫位址.
uid - 帳號.
pwd - 密碼.
sid - 預設資料庫.
db_enc. -  
ap_enc. -  
Throws:
SQLException,ClassNotFoundException -  

talk

public talk(java.lang.String db_type,
            java.lang.String ip,
            java.lang.String uid,
            java.lang.String pwd,
            java.lang.String sid,
            int max_connections)
/** 產生對DB的connection pool,與talk.cfg無關.

因此指令也不使用sendmsg,改採

Parameters:
db_type - 資料庫種類(mssql,oracle,sybase...).
ip - 資料庫位址.
uid - 帳號.
pwd - 密碼.
sid - 預設資料庫.
max_connections - connection Pool的大小.
Throws:
SQLException,ClassNotFoundException -  

talk

public talk(java.lang.String db_type,
            java.lang.String ip,
            java.lang.String uid,
            java.lang.String pwd,
            java.lang.String sid,
            int max_connections,
            int timeout)
產生對DB的connection pool,與talk.cfg無關.

因此指令也不使用sendmsg,改採

Parameters:
db_type - 資料庫種類(mssql,oracle,sybase...).
ip - 資料庫位址.
uid - 帳號.
pwd - 密碼.
sid - 預設資料庫.
max_connections - connection Pool的大小.
timeout - 設定閒置的connection過多久會自動與資料庫離線,單位是千分之一秒.
Throws:
SQLException,ClassNotFoundException -  

talk

public talk()
     throws java.sql.SQLException,
            java.lang.ClassNotFoundException
取得DB的Transaction通道,SQL指令全部結束後,一定要立即呼叫close().
Throws:
SQLException,ClassNotFoundException. -  
Method Detail

getTalk

public static talk getTalk(java.lang.String filename,
                           java.lang.String name)
取得專案設定的talk.
Parameters:
filename - 專案名稱.
name - 資料庫連接設定名稱.
Returns:
talk.

run

public void run()
Specified by:
run in interface java.lang.Runnable

isUnicodeEncoding

public boolean isUnicodeEncoding()
判斷目前的talk object的字串是否為UNICODE編碼.
Returns:
true if UNICODE encoding.

transfer

public static int transfer(java.lang.String sql1,
                           java.lang.String sql2,
                           java.lang.String type1,
                           java.lang.String ip1,
                           java.lang.String port1,
                           java.lang.String id1,
                           java.lang.String pwd1,
                           java.lang.String sid1,
                           java.lang.String type2,
                           java.lang.String ip2,
                           java.lang.String port2,
                           java.lang.String id2,
                           java.lang.String pwd2,
                           java.lang.String sid2)
                    throws java.lang.Exception
轉換異質資料庫資料.

適合將source table的資料轉至其它資料庫.

若為異質資料庫,可能需指定編碼.

Parameters:
sql1 - source的SQL指令.
sql2 - 目標資料庫的Table Name.
type1 - 來源資料庫的種類.
ip1 - 來源資料庫的位址.
port1 - 來源資料庫的port.
id1 - 來源資料庫的帳號.
pwd1 - 來源資料庫的密碼.
sid1 - 來源資料庫的DB Name.
type2 - 目標資料庫的種類.
ip2 - 目標資料庫的位址.
port2 - 目標資料庫的port.
id2 - 目標資料庫的帳號.
pwd2 - 目標資料庫的密碼.
sid2 - 目標資料庫的DB Name.
Returns:
資料庫成功筆數.
Throws:
java.lang.Exception - if SQL error or other Exception

transfer

public static int transfer(java.lang.String sql1,
                           java.lang.String sql2,
                           java.lang.String type1,
                           java.lang.String ip1,
                           java.lang.String port1,
                           java.lang.String id1,
                           java.lang.String pwd1,
                           java.lang.String sid1,
                           java.lang.String type2,
                           java.lang.String ip2,
                           java.lang.String port2,
                           java.lang.String id2,
                           java.lang.String pwd2,
                           java.lang.String sid2,
                           java.lang.String source_enc,
                           java.lang.String dest_enc)
                    throws java.lang.Exception
轉換異質資料庫資料.

適合將source table的資料轉至其它資料庫.

編碼原則,如果兩個資料庫的編碼相同,就無需指定,否則請參考下列資料.

編碼有可能隨作業系統、JDBC版本而變動,以下僅供參考.

Parameters:
sql1 - source 的SQL指令.
sql2 - 目標資料庫的Table Name.
type1 - 來源資料庫的種類.
ip1 - 來源資料庫的位址.
port1 - 來源資料庫的port.
id1 - 來源資料庫的帳號.
pwd1 - 來源資料庫的密碼.
sid1 - 來源資料庫的DB Name.
type2 - 目標資料庫的種類.
ip2 - 目標資料庫的位址.
port2 - 目標資料庫的port.
id2 - 目標資料庫的帳號.
pwd2 - 目標資料庫的密碼.
sid2 - 目標資料庫的DB Name.
source_enc - 來源資料庫的JDBC編碼.
dest_enc - 目標資料庫的JDBC編碼.
Returns:
資料庫成功筆數.
Throws:
java.lang.Exception - if SQL error or other Exception.

getInfo

public static java.lang.String getInfo()
查詢connection pool status.
Returns:
String 以HTML格式表示.

getHistory

public static java.util.Vector getHistory()
查詢執行過的SQL指令.
Returns:
Vector 執行過的SQL指令.
 Vector的每個元素的物件為String s[]=new String[4];
 s[0]=SQL 指令;
 s[1]=執行結果;
 s[2]=執行起始時間;
 s[3]=DB response Time (ms);
 

execFromPool

public int[] execFromPool(java.lang.String[] sql)
                   throws java.sql.SQLException,
                          java.lang.Exception
在同一個Transaction範圍內執行SQL異動指令.

發生錯誤時會產生 Excepion,否則會回傳數字陣列.

使用方法 : talk t=getTalk("xxx.dat","name1"); String ret=t.execFromPool(sql);

Parameters:
sql - SQL指令.
Returns:
回傳的資料.
Throws:
java.lang.Exception - if SQL error or other Exception.

execFromPool

public java.lang.String execFromPool(java.lang.String sql,
                                     java.lang.Object[] parameter)
                              throws java.sql.SQLException,
                                     java.lang.Exception
執行SQL異動指令,使用prepareStatement.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.execFromPool(sql,new Object[]{"a","b","c"});

Parameters:
sql - SQL指令.
parameter. -  
Returns:
回傳的資料.
Throws:
java.lang.Exception - if SQL error or other Exception.

execFromPool

public int[] execFromPool(java.lang.String[] sql,
                          java.lang.Object[][] parameter)
                   throws java.sql.SQLException,
                          java.lang.Exception
執行SQL異動指令,使用prepareStatement.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.execFromPool(sql[],new Object[][]{{"a","b","c"}});

Parameters:
sql - SQL指令(一維字串陣列).
parameter - (二維Object陣列).
Returns:
回傳的資料.
Throws:
java.lang.Exception - if SQL error or other Exception.

execFromPool

public java.lang.String execFromPool(java.lang.String sql)
                              throws java.sql.SQLException,
                                     java.lang.Exception
執行SQL異動指令.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.execFromPool(sql);

Parameters:
sql - SQL指令.
Returns:
回傳的資料.
Throws:
java.lang.Exception - if SQL error or other Exception.

queryHashtable

public java.util.Hashtable queryHashtable(java.lang.String sql,
                                          int index)
                                   throws java.lang.Exception
執行 SQL 查詢指令(執行結果會依照指定的KEY放在Hashtable).

使用SQL指令查詢過資料,執行結果會依照指定的KEY放在Hashtable,未來可以直接用key get,可傳回String[][].

SQL 指令最後一定要order by key.

使用方法: talk t=getTalk("xxx.dat","name1"); String sql="select EMPID,SALNO,AMOUNT from SALARY order by EMPID"; Hashtable h=t.queryHashtable(sql,0); String ret[][]=(String[][])h.get(EMPID); if(ret==null) ret=new String[0][0];

Parameters:
sql - SQL指令.
index - 放在Hashtable的key index.
Returns:
Hashtable 回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

queryFromPool

public java.lang.String[][] queryFromPool(java.lang.String sql,
                                          long timeout)
                                   throws java.sql.SQLException,
                                          java.lang.Exception
執行SQL 查詢指令(有cache功能).

如果相同的SQL指令已經查詢過資料,在尚未Timeout之前會使用剛剛的資料,以加快速度.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret[][]=t.queryFromPool(sql,3600);

Parameters:
sql - SQL指令.
timeout - 以秒計算.
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

queryFromPool

public java.lang.String[][] queryFromPool(java.lang.String sql,
                                          java.lang.Object[] parameter,
                                          long timeout)
                                   throws java.sql.SQLException,
                                          java.lang.Exception
執行SQL 查詢指令(有cache功能).

如果相同的SQL指令已經查詢過資料,在尚未Timeout之前會使用剛剛的資料,以加快速度.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret[][]=t.queryFromPool("select * from table1 where a=? and b like ? and c!=?",new Object[]{param1,param2,new Integer(param3)},3600);

Parameters:
sql - SQL指令.
parameter. -  
timeout - 以秒計算.
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

queryFromPool

public java.lang.String[][] queryFromPool(java.lang.String sql,
                                          long timeout,
                                          java.lang.String TAG)
                                   throws java.sql.SQLException,
                                          java.lang.Exception
執行SQL查詢指令(有cache功能).

如果相同的SQL指令已經查詢過資料,在尚未Timeout之前會使用剛剛的資料,以加快速度.

清除cache,請使用clear(String TAG);

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.queryFromPool(sql,3600,"HRUSER");

Parameters:
sql - SQL指令.
timeout - 以秒計算.
TAG - CACHE區名稱(建議使用sql內使用的Table Name,如兩個Table以上,以逗號隔開).
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

queryFromPool

public java.lang.String[][] queryFromPool(java.lang.String sql,
                                          java.lang.Object[] parameter,
                                          long timeout,
                                          java.lang.String TAG)
                                   throws java.sql.SQLException,
                                          java.lang.Exception
執行SQL查詢指令(有cache功能).

如果相同的SQL指令已經查詢過資料,在尚未Timeout之前會使用剛剛的資料,以加快速度.

清除cache,請使用clear(String TAG);

使用方法: talk t=getTalk("xxx.dat","name1"); String ret[][]=t.queryFromPool("select * from table1 where a=? and b like ? and c!=?",new Object[]{param1,param2,new Integer(param3)},3600,"HRUSER");

Parameters:
sql - SQL指令.
parameter. -  
timeout - 以秒計算.
TAG - CACHE區名稱(建議使用sql內使用的Table Name,如兩個Table以上,以逗號隔開).
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

queryFromPool

public java.lang.String[][] queryFromPool(java.lang.String sql,
                                          int start,
                                          int rows)
                                   throws java.sql.SQLException,
                                          java.lang.Exception
執行SQL查詢指令(區間,僅適用於DMaker).

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.execFromPool(sql,0,100);

Parameters:
sql - SQL指令.
start - 起點(第一筆請傳入0).
rows - 筆數.
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

queryFromPool

public java.lang.String[][] queryFromPool(java.lang.String sql)
                                   throws java.sql.SQLException,
                                          java.lang.Exception
執行SQL查詢指令.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.execFromPool(sql);

Parameters:
sql - SQL指令.
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

queryFromPool

public java.lang.String[][] queryFromPool(java.lang.String sql,
                                          java.lang.Object[] parameter)
                                   throws java.sql.SQLException,
                                          java.lang.Exception
執行SQL查詢指令(preparestatement).

使用方法: talk t=getTalk("xxx.dat","name1"); String ret[][]=t.queryFromPool("select * from table1 where a=? and b like ? and c!=?",new Object[]{param1,param2,new Integer(param3)});

Parameters:
sql - SQL指令.
parameter. -  
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

queryFromPool

public java.lang.String[][] queryFromPool(java.lang.String sql,
                                          java.lang.Object[] parameter,
                                          boolean with_cache)
                                   throws java.sql.SQLException,
                                          java.lang.Exception

backup

public void backup(java.lang.String path)
            throws java.lang.Exception
備份SQL的資料.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.exportFromPool(tablename,filename);

Parameters:
path. -  
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

exportFromPool

public int exportFromPool(java.lang.String s,
                          java.lang.String filename,
                          boolean include_scheme,
                          java.lang.String where)
                   throws java.sql.SQLException,
                          java.lang.Exception
匯出SQL的資料.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.exportFromPool(tablename,filename);

Parameters:
s - tablename.
filename. -  
include_scheme. -  
where. -  
Throws:
java.lang.Exception - if SQL error or other Exception.

importFromPool

public int importFromPool(java.lang.String s,
                          java.lang.String filename,
                          boolean recreate_table)
                   throws java.sql.SQLException,
                          java.lang.Exception
匯入SQL的資料.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret=t.exportFromPool(tablename,filename);

Parameters:
s - tablename.
filename. -  
recreate_table. -  
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

callFromPool

public java.util.Vector callFromPool(java.lang.String sp,
                                     java.util.Vector v)
                              throws java.sql.SQLException,
                                     java.lang.Exception
執行SQL Store Procedure.

使用方法:

 talk t=getTalk("xxx.dat","name1");
 Vector v=new Vector();
 v.addElement("[varchar]");    // 第一個參數,out 型態
 v.addElement(new Integer(1)); // 第一個input參數,in 型態
 v.addElement("parameter2");   // 第二個input參數,in 型態
 Vector ret=t.callFromPool("sp",v);
 String out_param1=(String)ret.elementAt(0);
 
Parameters:
sp - store procedure 名稱.
v - store procedure 參數,out parameter使用[varchar]或[int].
Returns:
回傳參數.
Throws:
java.lang.Exception - if SQL error or other Exception.

callFunctionFromPool

public java.util.Vector callFunctionFromPool(java.lang.String sp,
                                             java.util.Vector v)
                                      throws java.sql.SQLException,
                                             java.lang.Exception
執行SQLfunction.

使用方法:

 talk t=getTalk("xxx.dat","name1");
 Vector v=new Vector();
 v.addElement("[varchar]");    // 第一個參數,out 型態
 v.addElement(new Integer(1)); // 第一個input參數,in 型態
 v.addElement("parameter2");   // 第二個input參數,in 型態
 Vector ret=t.callFunctionFromPool("sp",v);
 String out_param1=(String)ret.elementAt(0);
 
Parameters:
sp - store function 名稱.
v - store function 參數,out parameter使用[varchar]或[int].
Returns:
回傳參數.
Throws:
java.lang.Exception - if SQL error or other Exception.

getConnectionFromPool

public java.sql.Connection getConnectionFromPool()
                                          throws java.sql.SQLException,
                                                 java.lang.ClassNotFoundException
取得java.sql.connection物件(只適用於server端程式).

使用方法: talk t=getTalk("xxx.dat","name1"); Connection con=t.getConnectionFromPool();

Returns:
connection.
Throws:
java.lang.Exception - if SQL error or other Exception.

getCatalogsFromPool

public java.lang.String[] getCatalogsFromPool()
                                       throws java.sql.SQLException,
                                              java.lang.ClassNotFoundException
查詢資料庫的Schemas.

使用方法: talk t=getTalk("xxx.dat","name1"); String tables[]=t.getSchemasFromPool();

Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

getTablesFromPool

public java.lang.String[] getTablesFromPool(java.lang.String pattern)
                                     throws java.sql.SQLException,
                                            java.lang.ClassNotFoundException
查詢資料庫的table.

使用方法: talk t=getTalk("xxx.dat","name1"); String tables[]=t.getTablesFromPool("");

Parameters:
pattern - tablename,空白表示全部table.
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

getObjectsFromPool

public java.lang.String[] getObjectsFromPool(java.lang.String pattern,
                                             java.lang.String type)
                                      throws java.sql.SQLException,
                                             java.lang.ClassNotFoundException
查詢資料庫的物件.

使用方法: talk t=getTalk("xxx.dat","name1"); String views[]=t.getObjectsFromPool("","view");

Parameters:
pattern - tablename,空白表示全部table.
type - 物件種類.
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

getColumnsFromPool

public java.lang.String[][] getColumnsFromPool(java.lang.String sql)
                                        throws java.sql.SQLException,
                                               java.lang.ClassNotFoundException

getSqlTypes

public java.lang.String[][] getSqlTypes()
                                 throws java.sql.SQLException,
                                        java.lang.ClassNotFoundException
查詢table的欄位資料.
使用方法:
 talk t=getTalk("xxx.dat","name1");
 String ret[][]=t.getColumnsFromPool("my_table");
 ret[i][0]: column name
 ret[i][1]: column type
 ret[i][2]: column type name
 ret[i][3]: column prec
 ret[i][4]: column scale
 ret[i][5]: column length
 
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

closeALL

public static void closeALL()
                     throws java.sql.SQLException
結束對DB的Transaction.

會先執行commit,然後再結束資料庫連線.

如果是Emaker的getTalk(),千萬不要直接呼叫close,可能會破壞其他使用者的DB session.

Throws:
java.sql.SQLException - if SQL error or TimeOut

close

public void close()
           throws java.sql.SQLException
結束資料庫連線.

如果是Emaker的getTalk(),千萬不要直接呼叫close,可能會破壞其他使用者的DB session.

Throws:
java.sql.SQLException - if SQL error or TimeOut

execute

public int execute(java.lang.String sql)
            throws java.lang.Exception
在Transaction範圍內執行SQL指令.

當整批指令執行完後,須依情況執行commit()或rollback(),以免鎖住資料庫.

Parameters:
sql - SQL指令.
Returns:
row count 異動之資料筆數.
Throws:
java.sql.SQLException - if SQL error or TimeOut.

query

public java.lang.String[][] query(java.lang.String sql)
                           throws java.lang.Exception
在Transaction範圍內執行SQL查詢指令.
Parameters:
sql - 查詢指令.
Returns:
查詢回傳的資料.
Throws:
java.sql.SQLException - if SQL error or TimeOut.

commit

public void commit()
            throws java.sql.SQLException
commit Transaction.
Throws:
java.sql.SQLException - if SQL error or TimeOut.

setSQLTimeout

public void setSQLTimeout(int timeout)

setTimeout

public void setTimeout(int timeout)
設定talk的timeout(ms),預設值為 60000(60秒).

timeout後,connection會自動rollback,並且close對DB的連線,

且所有method皆會發生SQLException: Talk Transaction Timeout!

Parameters:
timeout. -  

getTimeout

public int getTimeout()
取得talk的timeout(ms).
Returns:
timeout.

begin

public void begin()
           throws java.sql.SQLException,
                  java.lang.ClassNotFoundException
begin Transaction.
Throws:
java.sql.SQLException - if SQL error.

rollback

public void rollback()
              throws java.sql.SQLException
rollback Transaction.

自上一次commit後的SQL指令全部不算.

Throws:
java.sql.SQLException - if SQL error.

call

public static java.util.Vector call(java.lang.String sp,
                                    java.util.Vector v)
                             throws java.sql.SQLException,
                                    java.lang.Exception
執行SQL Store Procedure.

使用方法:

 Vector v=new Vector();
 v.addElement(new Integer(1)); // 第一個參數,in 型態
 v.addElement("parameter2");   // 第二個參數,in 型態
 v.addElement("[varchar]");    // 第三個參數,out型態
 v.addElement("[int]");        // 第四個參數,out型態
 String ret=talk.call("sp1",v);
 String out_param1=(String)v.elementAt(2);
 Integer out_param2=(Integer)v.elementAt(3);
Parameters:
sp - store procedure 名稱.
v - store procedure 參數,out parameter使用[varchar]或[int].
Returns:
回傳參數.
Throws:
java.lang.Exception - if SQL error or other Exception.

call

public static java.util.Vector call(java.lang.String sp,
                                    java.util.Vector v,
                                    java.lang.String cfgfile)
                             throws java.sql.SQLException,
                                    java.lang.Exception
執行SQL Store Procedure.

使用方法:

 Vector v=new Vector();
 v.addElement(new Integer(1)); // 第一個參數,in 型態
 v.addElement("parameter2");   // 第二個參數,in 型態
 v.addElement("[varchar]");    // 第三個參數,out型態
 v.addElement("[int]");        // 第四個參數,out型態
 String ret=talk.call("sp1",v);
 String out_param1=(String)v.elementAt(2);
 Integer out_param2=(Integer)v.elementAt(3);
Parameters:
sp - store procedure 名稱.
v - store procedure 參數,out parameter使用[varchar]或[int].
cfgfile - cfg檔案名稱.
Returns:
回傳參數.
Throws:
java.lang.Exception - if SQL error or other Exception.

sendmsg

public static java.lang.String sendmsg(java.lang.String s1,
                                       java.lang.String s2)
執行SQL指令.
Parameters:
s1 -
傳入select或exec,
 傳入select表示執行查詢指令;
 傳入 exec 表示執行資料庫異動指令(insert,update,delete).
s2 - SQL指令.
Returns:
String SQL 指令的回傳值(double byte encoding).

sendmsg

public static java.lang.String sendmsg(java.lang.String s1,
                                       java.lang.String s2,
                                       java.lang.String cfgfile)
執行SQL指令.
Parameters:
s1 -
傳入select或exec,
 傳入select表示執行查詢指令;
 傳入 exec 表示執行資料庫異動指令(insert,update,delete).
s2 - SQL指令.
cfgfile - 使用自定的config file,格式參照 talk.cfg.
Returns:
String SQL 指令的回傳值(double byte encoding).

sendmsg

public static java.lang.String sendmsg(java.lang.String s1,
                                       java.lang.String s2,
                                       java.lang.Object[] parameter)

sendmsg

public static java.lang.String sendmsg(java.lang.String s1,
                                       java.lang.String s2,
                                       java.lang.Object[] parameter,
                                       java.lang.String cfgfile)
執行SQL指令(preparestatement).
Parameters:
s1 -
傳入select或exec,
 傳入select表示執行查詢指令;
 傳入 exec 表示執行資料庫異動指令(insert,update,delete).
s2 - SQL指令.
parameter - SQL參數.
cfgfile - 使用自定的config file,格式參照 talk.cfg.
Returns:
String SQL 指令的回傳值(double byte encoding).

sendmsgx

public static java.lang.String[][] sendmsgx(java.lang.String s1,
                                            java.lang.String s2)
執行SQL指令.
Parameters:
s1 -
只可傳入select,
 傳入select表示執行查詢指令.
 傳入exec則回傳 String[0][0].
s2 - SQL指令.
Returns:
String[][]SQL指令的回傳值(double byte encoding).

sendmsgx

public static java.lang.String[][] sendmsgx(java.lang.String s1,
                                            java.lang.String s2,
                                            java.lang.String cfgfile,
                                            int timeout)
執行SQL指令.
Parameters:
s1 -
只可傳入select,
 傳入select表示執行查詢指令.
 傳入exec則回傳 String[0][0].
s2 - SQL指令.
cfgfile - 使用自定的config file,格式參照 talk.cfg.
timeout - cache timeout,單位:秒.
Returns:
String[][]SQL指令的回傳值(double byte encoding).

sendmsgx

public static java.lang.String[][] sendmsgx(java.lang.String s1,
                                            java.lang.String s2,
                                            java.lang.String cfgfile)
執行SQL指令.
Parameters:
s1 -
只可傳入select,
 傳入select表示執行查詢指令.
 傳入exec則回傳 String[0][0].
s2 - SQL指令.
cfgfile - 使用自定的config file,格式參照 talk.cfg.
Returns:
String[][] SQL 指令的回傳值 (double byte encoding).

sendmsgx

public static java.lang.String[][] sendmsgx(java.lang.String s1,
                                            java.lang.String s2,
                                            java.lang.Object[] parameter)

sendmsgx

public static java.lang.String[][] sendmsgx(java.lang.String s1,
                                            java.lang.String s2,
                                            java.lang.Object[] parameter,
                                            java.lang.String cfgfile)
執行SQL指令,use Preparestatement.
Parameters:
s1 -
只可傳入select,
 傳入select表示執行查詢指令.
 傳入exec則回傳 String[0][0].
s2 - SQL指令.
parameter - SQL參數.
cfgfile - 使用自定的config file,格式參照 talk.cfg.
Returns:
String[][] SQL 指令的回傳值 (double byte encoding).

sendmsgx

public static java.lang.String[][] sendmsgx(java.lang.String[] guardium,
                                            java.lang.String s1,
                                            java.lang.String s2,
                                            java.lang.String cfgfile)
執行SQL指令(guardium).
Parameters:
guardium - 專用參數.
s1 -
只可傳入select,
 傳入select表示執行查詢指令.
 傳入exec則回傳 String[0][0].
s2 - SQL指令.
cfgfile - 使用自定的config file,格式參照 talk.cfg.
Returns:
String[][]SQL指令的回傳值(double byte encoding).

sendmsg

public static int[] sendmsg(java.lang.String s1,
                            java.lang.String[] update_sqls)
                     throws java.lang.Exception
執行transaction的SQL指令.
Parameters:
s1 -
只可傳入exec,
 傳入exec表示執行所有異動指令.
 傳入 select 則回傳 int[0].
s2 - 異動SQL指令.
Returns:
int[]每一個異動SQL指令的回傳值.

getTables

public static java.lang.String[] getTables(java.lang.String pattern)
                                    throws java.lang.Exception
查詢資料庫的table.
Parameters:
pattern - tablename,空白表示全部table.
Returns:
回傳的資料(duble byte encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

getTables

public static java.lang.String[] getTables(java.lang.String pattern,
                                           java.lang.String cfgfile)
                                    throws java.lang.Exception
查詢資料庫的table.
Parameters:
pattern - tablename,空白表示全部table.
cfgfile,使用自定的config - file,格式參照talk.cfg.
Returns:
回傳的資料(duble byte encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

getColumns

public static java.lang.String[][] getColumns(java.lang.String sql)
                                       throws java.io.IOException
查詢table的欄位資料. ret[i][0]: column name ret[i][1]: column type ret[i][2]: column type name ret[i][3]: column prec ret[i][4]: column scale ret[i][5]: column length
Parameters:
tablename. -  
Returns:
回傳的資料(double byte encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

getColumns

public static java.lang.String[][] getColumns(java.lang.String sql,
                                              java.lang.String cfgfile)
                                       throws java.io.IOException
查詢 table 的欄位資料.

使用方法: talk t=getTalk("xxx.dat","name1"); String ret[][]=t.getColumnsFromPool("my_table"); ret[i][0]: column name ret[i][1]: column type ret[i][2]: column type name ret[i][3]: column prec ret[i][4]: column scale ret[i][5]: column length

Parameters:
tablename. -  
cfgfile,使用自定的 - config file ,格式參照 talk.cfg.
Returns:
回傳的資料(double byte encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

scheme

public void scheme(java.lang.String path)
            throws java.lang.Exception
比對 SQL 的scheme資料.

使用方法: talk t=getTalk("xxx.dat","name1"); t.scheme(tablename,filename);

Parameters:
path - 或 jar 檔名.
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

restore

public void restore(java.lang.String path)
             throws java.lang.Exception
還原 SQL 的資料.

使用方法: talk t=getTalk("xxx.dat","name1"); t.restore(tablename,filename);

Parameters:
path - 或 jar 檔名.
Returns:
回傳的資料(一律為 UNICODE encoding).
Throws:
java.lang.Exception - if SQL error or other Exception.

英特內軟體股份有限公司