1

私たちのアプリケーションは、ユーザーから提供された SQL の挿入/更新/削除を実行します。事前に SQL がどのように見えるかはわかりません。SQL 自体からテーブル名を解析せずに、挿入/更新/削除を実行した後に影響を受けたテーブルを取得する方法はありますか?

注: 明らかに、stmt.executeUpdate()noを呼び出しているため、 ResultSet/ResultSetMetaDataは使用できます。

質問: Insert/Update/Delete SQL の実行後に影響を受けたテーブルを特定する方法はありますか?

4

1 に答える 1

1

特定のDBシステムに依存する場合がありますが、いくつかのアイデアがあります:

列のテーブルを取得できる場合は、すべての列を反復処理して、使用したテーブルを保存できます。

接続オブジェクトがある場合は、すべてのテーブルを検査します。

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 に答える