剛剛被一個(gè)比較麻煩的問題所困擾。這個(gè)問題就是如何判斷數(shù)據(jù)中某張表是否存在,如果不存在則創(chuàng)建它。
恩,我先用了最笨的方法,就是寫個(gè)select從表中讀數(shù)據(jù),捕獲異常的同時(shí)就知道了改表沒有創(chuàng)建。
此法不通,因?yàn)檫@個(gè)時(shí)候的異常似乎被認(rèn)定為了系統(tǒng)錯(cuò)誤,于是后面創(chuàng)建表的代碼被忽略了。
大部分人的做法類似于select system.table where tabblename='***',反正我曾經(jīng)用類似的句子查詢過DB2,是成功的。
但是,我現(xiàn)在面對(duì)的不是DB2,而是7個(gè)不同的數(shù)據(jù)庫,基本上常用的都包括了。是不是每類數(shù)據(jù)庫都有上面的查詢語句呢?是否查詢語句相似呢?于是我挑了hsqldb,也是當(dāng)前的默認(rèn)數(shù)據(jù)庫,來尋找解決辦法。
很遺憾,我沒有找到類似前面的句子。正當(dāng)我打算放棄的時(shí)候發(fā)現(xiàn)了下面的代碼,這段代碼是我從一個(gè)國(guó)外的論壇中找到的,盡管我不知道它是不是萬能鑰匙,但是他這次對(duì)我而言確成了萬能的:
java.sql.Connection?con?=?getYourConnection();
???
ResultSet?rs?=?con.getMetaData().getTables(null,?null,?"yourTable",?null);

if?(rs.next())?
{
//yourTable?exist

}else?
{
//yourTable?not?exist
}
恩,我先用了最笨的方法,就是寫個(gè)select從表中讀數(shù)據(jù),捕獲異常的同時(shí)就知道了改表沒有創(chuàng)建。
此法不通,因?yàn)檫@個(gè)時(shí)候的異常似乎被認(rèn)定為了系統(tǒng)錯(cuò)誤,于是后面創(chuàng)建表的代碼被忽略了。
大部分人的做法類似于select system.table where tabblename='***',反正我曾經(jīng)用類似的句子查詢過DB2,是成功的。
但是,我現(xiàn)在面對(duì)的不是DB2,而是7個(gè)不同的數(shù)據(jù)庫,基本上常用的都包括了。是不是每類數(shù)據(jù)庫都有上面的查詢語句呢?是否查詢語句相似呢?于是我挑了hsqldb,也是當(dāng)前的默認(rèn)數(shù)據(jù)庫,來尋找解決辦法。
很遺憾,我沒有找到類似前面的句子。正當(dāng)我打算放棄的時(shí)候發(fā)現(xiàn)了下面的代碼,這段代碼是我從一個(gè)國(guó)外的論壇中找到的,盡管我不知道它是不是萬能鑰匙,但是他這次對(duì)我而言確成了萬能的:












?