JDBC Driver for Couchbase

Build 24.0.9062

プリペアドステートメントの使用

PreparedStatement オブジェクトは、プリコンパイルされたSQL ステートメントを表します。PreparedStatement は複数回使用でき、SQL インジェクション攻撃を軽減します。PreparedStatement には、SELECT、INSERT、UPDATE、またはDELETE ステートメントを使用できます。

プリペアドステートメントを実行するには、Statement クラスの一般的な実行メソッドを使用できます。このセクションでは、プリペアドステートメントの実行方法について説明します。

  1. Connection クラスのprepareStatement メソッドを使用して、PreparedStatement オブジェクトをインスタンス化します。

    接続を作成するにはCode からの接続 を参照してください。

  2. PreparedStatement の対応するセッターメソッドを呼び出すことによってパラメータを宣言します。パラメータインデックスは1から始まることに注意してください。
  3. PreparedStatement の実行メソッドを呼び出して、ステートメントを実行します。
  4. PreparedStatement のgetResultSet メソッドを呼び出して、ResultSet オブジェクトに結果をプルします。
  5. ResultSet.next を呼び出して、結果セットを反復処理します。ResultSetMetaData クラスを使用して、結果セットに関するカラム情報を取得します。ResultSetMetaData オブジェクトをインスタンス化するには、ResultSet のgetMetaData メソッドを呼び出します。

Select

次の例は、SELECT プリペアドステートメントを実行する方法を示しています。

String query = "SELECT * FROM Customer WHERE Name=? AND TotalDue=?";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, "XXX");
pstmt.setString(2, "YYY");
boolean ret = pstmt.execute();
if (ret) {
  ResultSet rs=pstmt.getResultSet();
  while(rs.next()) {
    for(int i=1;i<=rs.getMetaData().getColumnCount();i++) {
      System.out.println(rs.getMetaData().getColumnLabel(i) +"="+rs.getString(i));
    }
  }
} 

INSERT

INSERT を実行するには、一般的な実行メソッド、または次の例に示すようにexecuteUpdate メソッドを使用できます。

新しいレコード用に生成されたキーを取得するには、prepareStatement 呼び出しでStatement.RETURN_GENERATED_KEYS を指定します。ステートメントの実行後にgetGeneratedKeys メソッドを呼び出します。

String query = "INSERT INTO Customer (Name, TotalDue) VALUES (?,?)";
PreparedStatement pstmt = conn.prepareStatement(query,Statement.RETURN_GENERATED_KEYS );
pstmt.setString(1, "XXX");
pstmt.setString(2, "YYY");
int count = pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();
while(rs.next()) {
  for(int i=1;i<=rs.getMetaData().getColumnCount();i++) {
    System.out.println(rs.getMetaData().getColumnLabel(i) +"="+rs.getString(i));
  }
}

Upsert

アップサートの実行は、INSERT と同じです。一般的な実行メソッドかexecuteUpdate を使用します。

新しいレコード用に生成されたキーを取得するには、prepareStatement 呼び出しでStatement.RETURN_GENERATED_KEYS を指定します。ステートメントの実行後にgetGeneratedKeys メソッドを呼び出します。

String query = "UPSERT INTO Customer (Name, TotalDue) VALUES (?,?)";
PreparedStatement pstmt = conn.prepareStatement(query,Statement.RETURN_GENERATED_KEYS );
pstmt.setString(1, "XXX");
pstmt.setString(2, "YYY");
int count = pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();
while(rs.next()) {
  for(int i=1;i<=rs.getMetaData().getColumnCount();i++) {
    System.out.println(rs.getMetaData().getColumnLabel(i) +"="+rs.getString(i));
  }
}

Update

更新を実行するには、一般的な実行メソッド、または次の例に示すようにexecuteUpdate メソッドを使用できます。executeUpdate メソッドは影響を受けた行を返します。もしくは、getUpdateCount を呼び出します。

String query = "UPDATE Customer SET TotalDue = ? WHERE Id=?";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, "XXX");
pstmt.setString(2, "YYY");
int count = pstmt.executeUpdate();
System.out.println("Affected rows: "+count);

Delete

削除を実行するには、一般的な実行メソッド、または次の例に示すようにexecuteUpdate メソッドを使用できます。executeUpdate メソッドは影響を受けた行を返します。もしくは、getUpdateCount を呼び出します。

String query = "DELETE FROM Customer WHERE Id = ?";
PreparedStatement pstmt = conn.prepareStatement(query);
pstmt.setString(1, "XXX");
int count = pstmt.executeUpdate();
System.out.println("Affected rows: "+count);

Copyright (c) 2024 CData Software, Inc. - All rights reserved.
Build 24.0.9062