我正在尝试将一行数据写入Google Cloud SQL数据库,使用如下所述的预准备语句:
https://developers.google.com/apps-script/guides/jdbc
我将数据存储在名为valuesByTitle的对象中,如下所示:
{NAME:'有趣的事件',位置:'123 Main St。'}
如果我像这样写出所有内容,数据就会被插入到SQL表中:
var conn = getConnection(); // connects to db
var stmt = conn.prepareStatement('INSERT INTO events '
+ '(NAME, LOCATION) values (?, ?)');
stmt.setString(1, valuesByTitle['NAME']);
stmt.setString(2, valuesByTitle['LOCATION']);
stmt.execute();
}
但是,我想自动化该过程,因此每次变量更改时都不必更改代码。
我有两个新变量,一个用于列名,一个用于一组占位符(例如“?”)用于insert语句。
var columns = Object.keys(valuesByTitle);
var placeholders = columns.map(function(column) {
return "?";
};
使用这些,这个预准备语句应该自动插入valuesByTitle对象中的任何内容(假设所有值都是字符串值):
var conn = getConnection();
var stmt = conn.prepareStatement("INSERT INTO events (" + columns.join(",") + ") VALUES (" + placeholders.join(",") + ")");
for (i = 0; i < columns.length; i++) {
stmt.setString(i+1, valuesByTitle[columns[i]]);
}
stmt.execute();
由于某种原因,它没有插入数据。很惊讶也没有找到任何例子。逻辑关闭还是不可能?
感谢。
答案 0 :(得分:2)
您的所有代码都没问题,您只是忘了关闭map()
括号,即
var columns = Object.keys(valuesByTitle);
var placeholders = columns.map(function(column) {
return "?";
};
应该是
var columns = Object.keys(valuesByTitle);
var placeholders = columns.map(function(column) {
return "?";
});
(请注意return "?";}
之后的结束括号)