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

标签 java sql-server database oracle db2

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

数据库可能是不同的类型,即。微软 SQL 服务器、甲骨文、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. 
}

最佳答案

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

这对我来说适用于 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";
    }
 }
}

关于java - 检查表是否存在,使用java中的连接对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12892778/

相关文章:

java - Rect.intersects 不工作

java - 如何在java中将透明alpha channel 添加回png图像?

sql-server - 对于 XML 路径 ('' ) : Escaping "special" characters

sql - 返回团队成员多次被召回的日期

c# - 使用 SqlCommand 从多个表中删除

php - 显示数据库中的多个图像

java - Tomcat 将 'stderr' 内容重定向到 'stdout'

java - 创建名称为“org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping”的bean时出错

sql - 我应该避免连接中的循环吗?

database - 存储频繁请求的具有关系的键值数据的有效方法?