1

我们的应用程序执行用户提供给我们的插入/更新/删除 SQL。我们事先不知道 SQL 是什么样的。是否有一种方法可以在执行插入/更新/删除后获取受影响的表而不从 SQL 本身解析表名?

注意:显然,由于我们调用stmt.executeUpdate()no ResultSet/ResultSetMetaData将提供给我们。

问题:有没有办法在执行插入/更新/删除 SQL 后确定哪个表受到影响?

4

1 回答 1

1

这可能取决于您的特定数据库系统,但这里有一些想法:

如果您可以获得列的表,那么您可以遍历所有列并存储使用的表。

如果您有一个连接对象,您可以检查所有表:

DatabaseMetaData md = conn.getMetaData();
ResultSet rs = md.getTables(null, null, "%", null);
while (rs.next()) {
  System.out.println(rs.getString(3));
}

如果您有权访问 SQL 查询,则可以扫描FROMSQL 关键字以识别表,和/或进一步扫描语句或对语句使用 SQL 分析器。

于 2013-09-17T01:39:34.657 回答