1. 程式人生 > >JDBC 如何判斷一張表是否存在

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