我想从 Oracle 数据库模式中检索所有触发器名称。
我使用 getFunctions 来检索所有函数,但我找不到触发器的另一个函数。
DatabaseMetaData dbmd;
ResultSet result = dbmd.getFunctions(null, Ousername, null);
我想从 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 驱动程序中的一些未记录的后门 hack 的情况下检索触发器信息的唯一方法是发出特定于数据库的查询。
我找到了另一种通过 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 元数据中的触发器并没有得到很好的支持。