【问题标题】:Java code to check if a given User, Schema, Table exists?用于检查给定用户、模式、表是否存在的 Java 代码?
【发布时间】:2012-08-10 22:42:04
【问题描述】:

我想编写 Java 代码(也使用 Oracle 11g 和 JDBC)来检查特定用户或模式是否存在。我怎样才能通过仅使用 Java 代码而不是通过执行 SQL 查询(在我的 Java 代码中)来进行检查来做到这一点?

谢谢。

编辑 -

方法一:

在 MySQL 中,我们可以使用这样的东西 -

Connection conn = DriverManager.getConnection(url,username,password);
DatabaseMetaData DMD = conn.getMetaData();
ResultSet res = DMD.getCatalogs();
 while (res.next()) {
      String database = res.getString("TABLE_CAT");
}

现在在 while 中放置一个 if 来检查它是否存在 DB。

方法2:

或者,您可以执行本文中提到的一些查询。 Using SQL query to determine if a table exists

我想使用类似方法 1 的方法来完成工作,而不是方法 2 - 这就是我的意思。

【问题讨论】:

  • 不查询数据库,你怎么知道你在数据库中有什么?我看到唯一的选择是,在您的应用程序内的平面文件中保留这些条目的另一个副本(我认为这是非常糟糕的方式)。
  • 您可以尝试建立连接而不执行查询。但这只有在 db 用户具有 connect 权限时才有效。
  • @gkuzmin:建立连接是否足以获取架构和用户详细信息?不要误会我的意思,我不是数据库方面的专家。
  • 为什么您不想对数据库运行任何查询?当您想从数据库中获取数据时,这似乎是一个奇怪的限制。此外,根据原因,它还可能排除 conn.getMetaData() 之类的方法(当然,它会在后台运行 SQL 查询以获取其数据)。

标签: java jdbc oracle11g


【解决方案1】:

就这类事情询问数据库的纯 JDBC 方法是在您的 Java 应用程序中使用 DatabaseMetaData classDatabaseMetaData.getSchemas 将为您提供数据库中的一组模式。 DatabaseMetaData.getTables 将为您提供表格列表。您可以编写代码遍历这些ResultSet 对象,以查看是否存在特定的表或架构。

当然,在幕后,JDBC 驱动程序只是对 Oracle 数据字典执行 SQL 查询以获取此信息。

【讨论】:

  • 也许我们可以创建自己的方法来执行 SQL 语句以检查用户是否存在,然后在需要执行此类工作的任何代码中使用此方法。这就提出了另一个问题——我们的方法会和在幕后执行 SQL 的代码一样好吗?
  • @sweetdreams - 当然,您可以编写自己的代码。但是,如果您对使用 DatabaseMetaData 类感到满意,那么编写自定义 SQL 可能没有太多好处。如果您想获取预定义方法返回的数据子集(即您想获取单行而不是遍历数百行以确定是否存在特定用户),您可以编写更高效的查询比编写 JDBC 驱动程序的人开发的。但是,一般而言,您不太可能编写更有效的查询。
猜你喜欢
  • 2014-01-02
  • 2023-03-27
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 2018-03-16
  • 1970-01-01
相关资源
最近更新 更多