0
0

More than 1 year has passed since last update.

OUTPUT句の結果をJavaアプリケーション上で受け取りたい

Posted at

SQLServerには削除したり更新したりしたデータを返すOUTPUT句というものがあります。OUTPUT句の結果をJavaアプリケーション上で受け取りたい場合はPreparedStatement::executeQueryを利用して、SQLを発行すれば良いです。OUTPUT句はDELETE文やUPDATE文で利用しますが、通常DELETE文やUPDATE文の発行に利用するPreparedStatement::executeUpdateではOUTPUT句の結果を受け取れないことに注意する必要があります。

未検証ですが、データベース接続に何らかのライブラリを使う場合は、通常SELECT文を発行するためのAPIを用いて、OUTPUT句を含むDELETE文なりUPDATE文なりを発行すればよいかと思われます。

以下は従業員の情報を格納するemployeesテーブルからidが2と4の従業員を削除しつつ、その削除した従業員のidと名前と入社日を取得するサンプルです。

String sql = """ 
    DELETE FROM employees
    OUTPUT DELETED.id, DELETED.name, DELETED.hiredate
    WHERE id IN (2, 4)
""";

String url = "jdbc:sqlserver://localhost;encrypt=false";
String username = "sa";
String password = "1234@Hoge";
try (Connection con = DriverManager.getConnection(url, username, password)) {
    PreparedStatement pstmt = con.prepareStatement(sql);
    ResultSet rs = pstmt.executeQuery();
    while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        Date age = rs.getDate("hiredate");
        doSomething(id, name, age);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

環境情報

  • Java17
  • mssql-jdbc-10.2.1.jre17.jar

SQLServerはDockerを利用して起動。詳細なバージョンは以下の通り

Microsoft SQL Server 2019 (RTM-CU9) (KB5000642) - 15.0.4102.2 (X64) 
	Jan 25 2021 20:16:12 
	Copyright (C) 2019 Microsoft Corporation
	Developer Edition (64-bit) on Linux (Ubuntu 18.04.5 LTS) <X64>
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0