JDBC 如何判斷一張表是否存在
今天用到資料庫庫的知識,想用java程式碼的動態建立一張表結構。在建立表結構之前呢,我們首先要確定這張表在資料庫中 是不存在的。因為大家都知道同一個資料庫中的表名是不能重複的。
1 。用比較笨的方法,也是比較簡單的方法。利用錯誤來判斷表是否存在。
程式碼:
獲取連線一步課檢視 上一篇部落格。package com.vaolan.util.db; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.apache.log4j.Logger; import com.vaolan.util.file.ReadConfigFile; /** * 建立商品表的 * @author xiaoming * */ public class CreatProductTable { protected Logger logger; protected ReadConfigFile jdbcConfig; protected Connection conn; protected Statement st; protected ResultSet rs; public CreatProductTable(){ init(); } public void init (){ jdbcConfig = new ReadConfigFile("jdbc.properties"); } /** * 判斷表結構是否存在 * @param tableName 所判斷的表名 * @return */ public boolean validateTableExist(String tableName){ //定義一個變數標示 boolean flag = true ; //一個查詢該表所有的語句。 String sql = "SELECT COUNT(*) FROM "+ tableName ; //獲取連線 conn = ConnectFactory.getConnection(); try{ st = conn.createStatement(); rs = st.executeQuery(sql); flag = false; }catch(Exception e){ //該表不存在,則 會跳入catch中 e.printStackTrace(); }finally{ //關閉所有連線 CloseConnect.closeAll(conn, st, null, null); } return flag; } }
測試:
public static void main(String[] args) {
CreatProductTable c = new CreatProductTable();
boolean flag = c.validateTableExist("renern");
System.out.println(flag);
}
若結果為:false 說明 此方法正常,則說明 表已經存在。
true 說明 此方法進入catch中,方法異常,則說明表不存在,可以建立
2. 使用DatabaseMetaData類;
在這個類中有一個防範,getTables();
ResultSet rt = DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type);
引數含義:
catalog :用來尋找表名的目錄名稱。對於JDBC-ODBC資料庫和許多其它的資料庫,它可被設定為null。
schema:要包括的資料庫schema。許多資料庫並不支援schema,而對於其它的資料庫,它為資料庫所有者的使用者名稱稱。
tablemask:描述你要獲取的表的名稱的一個掩碼。若你想獲取所有的表名,將它設為萬用字元%。
types[] :描述你奧獲取的表的種類的一個字串陣列。資料庫中通常包括一些用於內部管理的表,而這些表對使用者來說是毫無用處的。若被設為null,你將得到所有的表。若使該陣列只包括一個元素,且將該元素設為字串“TABLES”,你將得到使用者所感興趣的那些表。 (簡單地說就是表的型別)包括:"TABLE"、"VIEW"、"SYSTEM TABLE"、"GLOBAL TEMPORARY"、"LOCAL TEMPORARY"、"ALIAS"
和 "SYNONYM"
程式碼:
public boolean validateTableExist(String tableName){
boolean flag = false;
try {
conn = ConnectFactory.getConnection();
DatabaseMetaData meta = conn.getMetaData();
String type [] = {"TABLE"};
rs = meta.getTables(null, null, tableName, type);
flag = rs.next();
} catch (SQLException e) {
e.printStackTrace();
}
return flag;
}
結果:true 表存在;false 表不存在
瞭解更多:DatabaseMetaData
http://canfly2010.iteye.com/blog/520557
http://hi.baidu.com/qqljsevpepbhilq/item/60d94ad0d11feb3a48e1ddd9