繁体   English   中英

如何使用 Java JDBC 从数据库中获取所有触发器名称?

[英]How to get all trigger names from a database using Java JDBC?

我想从 Oracle 数据库模式中检索所有触发器名称。

我使用 getFunctions 来检索所有函数,但我找不到触发器的另一个函数。

DatabaseMetaData dbmd;
ResultSet result = dbmd.getFunctions(null, Ousername, null);

您可以使用元数据来完成。

DatabaseMetaData dbmd = dbConnection.getMetaData(); 
ResultSet result = dbmd.getTables("%", Ousername, "%", new String[]{ "TRIGGER" });
while (result.next()) {
     result.getString("TABLE_NAME")
}

JDBC API 不提供从 DatabaseMetaData 中检索触发器信息的标准方法。 事实上,“触发器”这个词甚至没有出现在 Javadoc 中。 接受的答案可能适用于 Oracle,但没有记录,它当然不适用于 HSQL 和 PostgreSQL 等其他数据库。

此时,检索触发器信息而不在 JDBC 驱动程序中发现一些未记录的后门黑客的唯一方法是发出特定于数据库的查询。

我找到了另一种通过 PreparedStatement 获取所有触发器的方法:

try {
    System.out.println("\n******* Table Name: "+ tableName);    
    String selectQuery = "SELECT TRIGGER_NAME FROM ALL_TRIGGERS WHERE TABLE_NAME = ?";
    PreparedStatement statement = DataSource.getConnection().prepareStatement(selectQuery); 
    statement.setString(1, tableName.toUpperCase());
    ResultSet result = statement.executeQuery();

    System.out.println("Triggers: ");
    while (result.next()) {
        String triggerName = result.getString("TRIGGER_NAME");
        System.out.println(triggerName);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

仅提示 MySQL 用户:如果您想从 MySQL 数据库中检索所有触发器,则 INFORMATION_SCHEMA 中的表 TRIGGERS 包含有关数据库触发器的所有信息:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS

类似的是例程(函数和过程)

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

不幸的是触发器在 JDBC MetaData 中没有得到很好的支持。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM