2012-02-29 68 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