Jdbc 谷歌云SQL+;返回生成的密钥

Jdbc 谷歌云SQL+;返回生成的密钥,jdbc,google-apps-script,google-cloud-sql,Jdbc,Google Apps Script,Google Cloud Sql,我的Google Cloud SQL数据库中有一个表,其中有一个自动递增的列 如何通过googleapps脚本/JDBC执行INSERT查询并获取新增加的列的值 例如,我的列名为ticket\u id。我想插入,并在结果集中返回新的票证id值 换句话说,如果我有以下结构,我需要修改什么或如何修改,以便我可以执行类似rs=stmt.getGeneratedKeys()的操作 我看到有一个JDBC语句类,其中有一个名为RETURN\u GENERATED\u KEYS的成员,但到目前为止,我还没有足

我的Google Cloud SQL数据库中有一个表,其中有一个自动递增的列

如何通过googleapps脚本/JDBC执行
INSERT
查询并获取新增加的列的值

例如,我的列名为
ticket\u id
。我想
插入
,并在结果集中返回新的
票证id

换句话说,如果我有以下结构,我需要修改什么或如何修改,以便我可以执行类似
rs=stmt.getGeneratedKeys()的操作


我看到有一个JDBC语句类,其中有一个名为
RETURN\u GENERATED\u KEYS
的成员,但到目前为止,我还没有足够的智慧来弄清楚如何正确地操作它并获得所需的内容。
RETURN\u GENERATED\u KEYS
是一个常量,是一个属性,还是我如何使用它?

似乎有点缺少关于应用程序脚本JDBC服务的文档。我已经为此创建了一个内部任务项。谢天谢地,应用程序脚本JDBCAPI与JavaJDBCAPI非常接近。关键是使用
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();
}
函数foo(){
var conn=Jdbc.getCloudSqlConnection(“Jdbc:google:rdbms://”);
var stmt=conn.createStatement();
var sql=“插入动物(名称)值('dog')”;
var count=stmt.executeUpdate(sql,1)//将auto inc id的任何int传递回
var rs=stmt.getGeneratedKeys();
//如果您只希望返回一行,则不需要while循环
//只要做下一步就行了;
while(rs.next()){
Logger.log(rs.getString(1));
}
rs.close();
stmt.close();
康涅狄格州关闭();
}

似乎缺少应用程序脚本JDBC服务的文档。我已经为此创建了一个内部任务项。谢天谢地,应用程序脚本JDBCAPI与JavaJDBCAPI非常接近。关键是使用
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();
}
函数foo(){
var conn=Jdbc.getCloudSqlConnection(“Jdbc:google:rdbms://”);
var stmt=conn.createStatement();
var sql=“插入动物(名称)值('dog')”;
var count=stmt.executeUpdate(sql,1)//将auto inc id的任何int传递回
var rs=stmt.getGeneratedKeys();
//如果您只希望返回一行,则不需要while循环
//只要做下一步就行了;
while(rs.next()){
Logger.log(rs.getString(1));
}
rs.close();
stmt.close();
康涅狄格州关闭();
}

不错!谢谢,阿伦,做得很好。虽然我在Oracle/Java文档中看到了GetGeneratedKeys方法,但在Google应用程序脚本JDBC文档中没有看到它,所以我从来没有想过尝试一下。Arun,这解决了我的一个问题。但是也许你可以给我一些关于以下方面的更多信息:从昨天开始stmt.getGeneratedKeys();失败,错误为:未请求生成的密钥。您需要指定Statement.RETURN\u生成的\u键到Statement.executeUpdate()或Connection.prepareStatement()。在我将stmt.prepareStatement(sql)更改为stmt.prepareStatement(sql,1)之后,它再次工作。昨天有什么改变导致丢失的int失败了吗?这是正确的技巧吗?很好!谢谢,阿伦,做得很好。虽然我在Oracle/Java文档中看到了GetGeneratedKeys方法,但在Google应用程序脚本JDBC文档中没有看到它,所以我从来没有想过尝试一下。Arun,这解决了我的一个问题。但是也许你可以给我一些关于以下方面的更多信息:从昨天开始stmt.getGeneratedKeys();失败,错误为:未请求生成的密钥。您需要指定Statement.RETURN\u生成的\u键到Statement.executeUpdate()或Connection.prepareStatement()。在我将stmt.prepareStatement(sql)更改为stmt.prepareStatement(sql,1)之后,它再次工作。昨天是否有什么改变导致丢失的int失败,这是正确的技巧?