2012-11-24 77 views
1

我在自己的Google Cloud SQL数据库中添加了一个带有自动递增列的表格。Google Cloud SQL + RETURN_GENERATED_KEYS

如何通过google-apps-script/JDBC执行INSERT查询并获取新增列的值?

例如,我的专栏名为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

看起来像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(); 
} 
+0

不错!谢谢Arun,工作完美。尽管我在Oracle/Java文档中看到了GetGeneratedKeys方法,但我没有在Google Apps脚本JDBC文档中看到它,所以我从来没有想过只是试试它。 – Biff

+0

阿伦,这固定了我的一个问题。但也许你可以给我一些关于以下内容的更多信息: 由于昨天stmt.getGeneratedKeys();失败并显示错误: 未请求生成的密钥。您需要将Statement.RETURN_GENERATED_KEYS指定为Statement.executeUpdate()或Connection.prepareStatement()。 我改变了stmt.prepareStatement(sql)之后stmt.prepareStatement(sql,1)它再次工作。 昨天有什么改变,使失踪的int失败,这是正确的把戏? –