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

时间:2015-05-06 10:36:30

标签: java oracle jdbc triggers database-metadata

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

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

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

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

目前唯一可以在JDBC驱动程序中找不到一些未记录的后门黑客来检索触发器信息的方法是发出特定于数据库的查询。

答案 2 :(得分:0)

我找到了另一种通过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();
}

答案 3 :(得分:0)

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

SELECT * FROM INFORMATION_SCHEMA.TRIGGERS

类似于例程(功能和过程)

SELECT * FROM INFORMATION_SCHEMA.ROUTINES

不幸的是,JDBC MetaData没有很好地支持触发器。