1

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

数据库可能是不同类型的,即。MS SQL Server、甲骨文、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. 
}
4

3 回答 3

3

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

无论表是由当前用户还是其他用户拥有,这对我来说都适用于 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";
    }
 }
}
于 2012-10-15T09:34:20.727 回答
2

你可以试试getTables().DatabaseMetaData

于 2012-10-15T09:35:40.590 回答
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。细绳[])

于 2012-10-15T09:37:15.573 回答