如何使用 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 检索触发器信息的标准方法。事实上,"trigger" 这个词甚至没有出现在 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 中有 table TRIGGERS,其中包含有关数据库触发器的所有信息:

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS

例程(函数和过程)类似

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

不幸的是,触发器在 JDBC 元数据中没有得到很好的支持。