[英]NodeJs:Unable to connect Google Cloud SQL from Google App Engine
[英]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.