我正在尝试使用准备好的语句将一行数据写入 Google Cloud SQL 数据库,如下所述:
https://developers.google.com/apps-script/guides/jdbc
我将数据存储在名为valuesByTitle 的对象中,如下所示:
{名称:“有趣的事件”,位置:“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();
}
但是,我希望使该过程自动化,这样我就不必在每次变量更改时都更改代码。
我有两个新变量,一个用于列名,另一个用于插入语句的一组占位符(例如“?”)。
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();
由于某种原因,它没有插入数据。也很惊讶没有找到任何例子。逻辑是关闭的还是根本不可能做到?
谢谢。
最佳答案
您的所有代码都可以,您只是忘记关闭 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 "?";}
后的结束括号)
关于javascript - 创建动态准备语句以插入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857013/