2012-11-24 6 views
1

자동 증가 열이있는 Google Cloud SQL 데이터베이스에 테이블이 있습니다.Google Cloud SQL + RETURN_GENERATED_KEYS

google-apps-script/JDBC를 통해 INSERT 쿼리를 실행하고 새로 증분 된 열의 값을 다시 얻으려면 어떻게해야합니까?

예를 들어, 내 열의 이름은 ticket_id입니다. INSERT을 원하고 새로운 ticket_id 값을 결과 집합에 반환해야합니다. 나는 다음과 같은 구조를 가지고 있다면 나는이 JDBC 문 클래스가 함께 있다는 것을 볼 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); 

처럼 뭔가를 할 수 있도록 즉

는, 나는 어떻게 수정하거나 무엇을해야 회원은 RETURN_GENERATED_KEYS라고 불렀지 만 지금까지 제대로 조작하고 필요한 것을 얻는 방법을 알아내는 데는 현명하지 못했습니다. RETURN_GENERATED_KEYS은 상수입니까, 속성입니까, 아니면 어떻게 사용할 수 있습니까?

답변

4

Apps Script JDBC 서비스의 설명서가 약간 부족한 것처럼 보입니다. 내가 그것에 대한 내부 작업 항목을 만들었습니다. 고맙게도 Apps Script JDBC API는 Java JDBC API를 매우 잘 준수합니다. 핵심은 stmt.getGeneratedKeys() 호출을 사용하여 결과 세트를 다시 얻는 것입니다.

MySQL 문서의 animals 예제를 사용하여 샘플 테이블을 만들었습니다.이 샘플은 다음 예제와 잘 어울리 며 다음 증분 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 Script JDBC 문서에서는 GetGeneratedKeys 메소드를 보지 못 했으므로 시도하지 않으려 고 생각했습니다. – Biff

+0

Arun,이 문제가 해결되었습니다. 하지만 어쩌면 당신은 나에게 다음에 대한 더 많은 정보를 줄 수 있습니다 : 어제 이후 stmt.getGeneratedKeys(); 오류로 실패했습니다 : 생성 된 키가 요청되지 않았습니다. Statement.executeUpdate() 또는 Connection.prepareStatement()에 Statement.RETURN_GENERATED_KEYS를 지정해야합니다. stmt.prepareStatement (sql) tot stmt.prepareStatement (sql, 1)을 변경 한 후 다시 작동했습니다. 어제 변경된 내용이 누락 된 int를 실패로 만들었으며 이것이 올바른 트릭입니까? –

관련 문제