创建动态准备语句以插入数据库

时间:2015-06-16 00:24:58

标签: javascript mysql jdbc prepared-statement google-cloud-sql

我正在尝试将一行数据写入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();

由于某种原因,它没有插入数据。很惊讶也没有找到任何例子。逻辑关闭还是不可能?

感谢。

1 个答案:

答案 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 "?";}之后的结束括号)