Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取执行JDBC Insert/Update/Delete后使用的表名_Java_Sql_Jdbc - Fatal编程技术网

Java 获取执行JDBC Insert/Update/Delete后使用的表名

Java 获取执行JDBC Insert/Update/Delete后使用的表名,java,sql,jdbc,Java,Sql,Jdbc,我们的应用程序执行用户提供给我们的Insert/Update/Delete SQL。我们现在还不知道SQL是什么样子。是否有一种方法可以在执行Insert/Update/Delete后获得受影响的表,而无需从SQL本身解析表名 注意:显然,由于我们正在调用stmt.executeUpdate()noResultSet/ResultSetMetaData,因此我们可以使用 问题:是否存在一种方法来确定执行Insert/Update/Delete SQL后哪个表受到影响?这可能取决于您的特定数据库系

我们的应用程序执行用户提供给我们的Insert/Update/Delete SQL。我们现在还不知道SQL是什么样子。是否有一种方法可以在执行Insert/Update/Delete后获得受影响的表,而无需从SQL本身解析表名

注意:显然,由于我们正在调用
stmt.executeUpdate()
no
ResultSet
/
ResultSetMetaData
,因此我们可以使用


问题:是否存在一种方法来确定执行Insert/Update/Delete SQL后哪个表受到影响?

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

如果可以获取列的表,则可以迭代所有列并存储使用的表

如果有连接对象,则可以检查所有表:

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

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

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

如果可以获取列的表,则可以迭代所有列并存储使用的表

如果有连接对象,则可以检查所有表:

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

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

扫描/解析不是选项。如何迭代删除SQL中的所有列?扫描/解析不是选项。如何迭代deletesql中的所有列?