2012-02-29 71 views
0
毫秒的存取是否存在表

有人可以告訴我,我怎麼能檢查是否使用Java數據庫連接Microsoft Access中存在的表。搜索後,我去類似 如果不ISNULL(使用DLookup(「姓名」,「MSysObjects」,「名稱=‘表名’」))然後 「表中存在 我試圖實現JDBC程序同樣的事情檢查通過JDBC

import java.sql.*; 
class CheckTable{ 
public static void main(String [] rak){ 
boolean flag; 
try{ 
flag=false; 
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
String dataSourceName="test"; 
String dbURL="jdbc:odbc:"+dataSourceName; 
Connection con=DriverManager.getConnection(dbURL,"",""); 
Statement s=con.createStatement(); 
//s.execute("create table xyz (name text, hiredate date)"); 
//s.execute("insert into xyz values('xz1','22-dec-2005')"); 
// s.execute("insert into xyz values('pr','2-21-2009')"); 
s.execute(" If Not IsNull(DlookUp('Name','MSysObjects',"Name='xyz'")) Then "+ flag=true + "); 

/* 
     ResultSet rs=s.getResultSet(); 
    if (rs!=null){ 
     while(rs.next()){ 
     System.out.println(rs.getString(1)+rs.getString(2)); 
     }} 
    */  
} 
catch(Exception e){ 
    e.printStackTrace(); 
} 
System.out.println(" table exists :"+flag); 
    } 
    } 

我得到錯誤在s.execute()語句請幫助我的語法。 我得到的錯誤是: ')'預計 表達式的非法開始 未關閉的字符文字 不是一個聲明 ;如果不是IsNull(DlookUp('Name','MSysObjects','Name ='xyz'「))然後」+ flag = true +「);

+0

什麼錯誤? – kosa 2012-02-29 15:24:07

+0

你可能想尋找'getMetaData'和'getTabl es' – Fionnuala 2012-02-29 15:46:18

回答

0

嘗試select 1 from TABLE_NAME這將引發SQLException如果表不存在檢查SQLStateerrorCode - 。會有這種情況下的特定值

不幸的是,代碼爲每個數據庫不同,所以你將有一旦將它們打印在控制檯上,然後在異常處理程序複製正確的價值觀。

+0

謝謝,這個工程,但仍然要管理例外 – Rak 2012-02-29 15:57:09

+0

正確。還有其他的方式(比如獲取元數據並查看錶名),但這也不是很容易得到。我的方法始終有效。通常,我在幫助類中收集這些代碼,以便我可以說'AccessHelper.isTableNotFound(e)' – 2012-02-29 16:05:14