使用java中的连接对象检查表是否存在

时间:2012-10-15 09:29:11

标签: java sql-server database oracle db2

我需要检查我的java程序中的数据库中是否存在具有特定“tablename”的表。

数据库可能是不同类型的,即。 MS SQL Server,Oracle,DB2。我有一个数据库的连接对象。是否有一种方法可以适用于所有类型的数据库? 我可能必须扩展java程序以支持更多的数据库类型,因此对所有数据库类型的单一方法将非常有用。

我正在使用的代码。这似乎对SQL Server数据库正常工作,但在Oracle或DB2中找不到该表

DatabaseMetaData meta = conn.getMetaData(); 
ResultSet res = meta.getTables(null, null, "TABLE_NAME", null); 
if(!res.next()){ 
  //table does not exist. 
} else{
   //table exists. 
}

3 个答案:

答案 0 :(得分:3)

您可以使用DatabaseMetaData.getTables()过程在数据库中搜索具有特定模式的表。如果您搜索确切的名称,您将获得一个空的ResultSetResultSet,其中只有一行告诉您该表存在。

无论表是由当前用户还是其他用户拥有,这都适用于Oracle数据库。

import java.sql.*;
import oracle.jdbc.*;
public class TableExists
{
 public static String exists(String tableName)
     throws SQLException
 {
    Connection       conn = new OracleDriver().defaultConnection();
    DatabaseMetaData meta = conn.getMetaData(); 
    ResultSet res = meta.getTables(null, null, tableName, null); 
    if(!res.next()){ 
      return "Nope";
    } else{
      return "Yup";
    }
 }
}

答案 1 :(得分:2)

您可以尝试getTables()的{​​{1}}方法。

答案 2 :(得分:1)

非常简单:

SELECT
    1
FROM
    TABLE
;

如果它抛出异常,则该表不存在(或其他错误)。 否则:

http://docs.oracle.com/javase/6/docs/api/java/sql/DatabaseMetaData.html#getTables(java.lang.String,java.lang.String,java.lang.String,java.lang.String [])