1

Google Cloud SQL データベースに、自動インクリメント列を持つテーブルがあります。

INSERTgoogle-apps-script/JDBC を介してクエリを実行し、新しくインクリメントされた列の値を取得するにはどうすればよいですか?

たとえば、私の列の名前はticket_idです。INSERT結果セットに新しいticket_id値が返されるようにしたいと考えています。

言い換えれば、次のような構造を持っている場合、次のようなことができるように、何をどのように変更する必要がありますか?rs = stmt.getGeneratedKeys();

var conn = Jdbc.getCloudSqlConnection("jdbc:google:rdbms:.......  
var stmt = conn.createStatement();

//build my INSERT sql statement  
var sql = "insert into ......

var rs = stmt.executeUpdate(sql);

呼び出されたメンバーを持つ JDBC ステートメント クラスがあることがわかりましたが、RETURN_GENERATED_KEYSこれまでのところ、それを適切に操作して必要なものを取得する方法を理解するほど賢くありませんでした。定数ですかRETURN_GENERATED_KEYS、属性ですか、それともどのように利用できますか?

4

1 に答える 1

5

Apps Script JDBC サービスのドキュメントが少し不足しているようです。そのための内部タスク アイテムを作成しました。ありがたいことに、Apps Script JDBC API は Java JDBC API に非常によく似ています。stmt.getGeneratedKeys()重要なのは、呼び出しを使用して結果セットを取得することです。

MySQL ドキュメントの動物の例を使用してサンプル テーブルを作成しました。以下のこのサンプルはそれに対してうまく機能し、次のインクリメントされた ID をログに記録します。

function foo() {
  var conn = Jdbc.getCloudSqlConnection("jdbc:google:rdbms://<instance>/<db>");
  var stmt = conn.createStatement();
  var sql = "INSERT INTO animals (name) VALUES ('dog')";
  var count = stmt.executeUpdate(sql,1)//pass in any int for auto inc IDs back
  var rs = stmt.getGeneratedKeys();
  //if you are only expecting one row back, no need for while loop
  // just do rs.next();
  while(rs.next()) { 
    Logger.log(rs.getString(1));
  }
  rs.close();
  stmt.close();
  conn.close();
}
于 2012-11-24T19:24:42.840 に答える