簡體   English   中英

Google 應用腳本 - 從 GOOGLE 表格寫入雲 SQL

[英]Google App Script - WRITE FROM GOOGLE SHEETS TO CLOUD SQL

我正在嘗試將谷歌表格中的列中的數據寫入雲 sql 中的表中。

錯誤是:

“例外:參數(字符串)與 Jdbc.JdbcPreparedStatement.setString 的方法簽名不匹配。”

在線的

stmt.setString('' + CopyData[i][0]);

我對谷歌應用腳本非常陌生,對 mySQL 的了解非常有限。 大約 10 年前在大學里完成了 web 開發課程,從那以后就再也沒有看過了。

我嘗試使用的代碼是:

function WriteToDB() {

  var connectionName = 'xxx';
  var user = 'xxx';
  var userPwd = 'xxx1';
  var db = 'TestDB';
  var instanceUrl = 'jdbc:google:mysql://' + connectionName;
  var dbUrl = instanceUrl + '/' + db;
  var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
      conn.setAutoCommit(false);

  var SS_File = SpreadsheetApp.getActiveSpreadsheet();
  var SourceSheet = SS_File.getSheetByName("WorkSheet1");

  var headerRowNumber = 1;
  var CopyData = SourceSheet.getDataRange().offset(headerRowNumber, 0, SourceSheet.getLastRow() - headerRowNumber).getValues();

 var stmt = conn.prepareStatement('INSERT INTO TestTable ' +  '(TestColumn) VALUES (?)');

 for (var i = 0; i < CopyData.length; i++) {
  stmt.setString('' + CopyData[i][0]);
  stmt.addBatch();
}

  var batch = stmt.executeBatch();
  conn.comit();
  conn.close();

  var end = new Date();
  Logger.log('Time elapsed: %s ms for %s rows.', end - start, batch.length);
}

連接正常,我可以通過應用腳本創建表等。 就是不能寫這個數據。

數據在電子表格的 A 列中,header 行為 1。

有人能幫忙嗎?

謝謝!

我試過了

 for (var i = 0; i < CopyData.length; i++) {
  stmt.setObject(i, CopyData[i][0]);
  stmt.addBatch();

錯誤:“異常:參數索引超出范圍(0 < 1)”

&

 for (var i = 0; i < CopyData.length; i++) {
  stmt.setObject(i+1, CopyData[i][0]);
  stmt.addBatch();

錯誤:“異常:參數索引超出范圍(2 > 參數數量,即 1)”

&

 for (var i = 0; i < CopyData.length; i++) {
  stmt.setObject(i, CopyData[i]);
  stmt.addBatch();

錯誤:“異常:無效的參數值:java.sql.SQLException”

卡住。

我想我嘗試使用批處理但沒有成功,所以我逐行 go 並且性能仍然很好。

我首先構建基本字符串:

var stmtStr = "INSERT INTO TestTable (TestColumn) VALUES (";

然后在循環中使用基本字符串的副本:

for (var i = 0; i < CopyData.length; i++) {
   query = stmtStr + CopyData[i][0] + ")";
   stmt = conn.createStatement();
   iUpdate = stmt.executeUpdate(query);
   if (i==0) {
     console.log(query, iUpdate, CopyData[i][0]);
   }
}

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

未來任何人都可以使用的工作代碼。

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

我唯一遇到的問題是雲 SQL 超時限制。 - 努力解決這個問題,一旦我解決了問題,將提供解決方案。

注意:確保源表中的值是字符串,而不是公式。

我不得不使用 copy.to(xxx, {contentsonly:true}) 將值復制到另一張紙上。

function WriteToDB() {

var connectionName = 'YOUR_CONNECTION_NAME';
var user = 'YOUR_USERNAME';
var userPwd = 'YOUR_PASSWORD';
var db = 'YOUR_DATABASE';
var instanceUrl = 'jdbc:google:mysql://' + connectionName;
var dbUrl = instanceUrl + '/' + db;

  var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);
  conn.setAutoCommit(false);

  var SS_File = SpreadsheetApp.getActiveSpreadsheet();
  var SourceSheet = SS_File.getSheetByName("YOUR_SHEET_NAME");

  var headerRowNumber = 1; // HOW MANY ROWS TO MISS
  var CopyData = SourceSheet.getDataRange().offset(headerRowNumber, 0, SourceSheet.getLastRow() - headerRowNumber).getValues();

 var stmt = conn.prepareStatement("INSERT INTO YOUR_TABLE_NAME " +  "(YOUR_COLUMN_NAME) VALUES (?)");
    for (var i = 0; i < CopyData.Length; i++) {
        stmt.setString(1, CopyData[i][0]);
        stmt.addBatch();
    }
  var batch = stmt.executeBatch();
  conn.commit();
  conn.close();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM