Javascript 创建要插入数据库的动态准备语句

Javascript 创建要插入数据库的动态准备语句,javascript,mysql,jdbc,prepared-statement,google-cloud-sql,Javascript,Mysql,Jdbc,Prepared Statement,Google Cloud Sql,我正在尝试使用一条准备好的语句将一行数据写入Google Cloud SQL数据库,如下所述: 我将数据存储在一个名为valuesByTitle的对象中,该对象如下所示: var conn = getConnection(); // connects to db var stmt = conn.prepareStatement('INSERT INTO events ' + '(NAME, LOCATION) values (?, ?)'); stmt.setString(1, values

我正在尝试使用一条准备好的语句将一行数据写入Google Cloud SQL数据库,如下所述:

我将数据存储在一个名为valuesByTitle的对象中,该对象如下所示:

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();
}
{名称:'fun event',位置:'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 "?";
};
使用这些,此准备好的语句应自动插入ValuesBytle对象中的任何内容,假设所有值都是字符串值:

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();
出于某种原因,它没有插入数据。很惊讶没有发现任何例子。逻辑是错误的还是根本不可能做到


谢谢。

所有代码都正常,您只是忘记关闭地图括号,即

var columns = Object.keys(valuesByTitle);
  var placeholders = columns.map(function(column) { 
  return "?";
};
应该是

var columns = Object.keys(valuesByTitle);
var placeholders = columns.map(function(column) { 
  return "?";
});

注意返回后的结束括号?;}

谢谢。那个括号在我的代码里,把复制和粘贴都弄糟了。不过我发现了问题。数据来自的表单也有数字和日期值,因此当setString行运行时,事情停止了。当我在表单中只保留字符串选项时,一切都很好。现在,我只需要编写一些条件规则来处理如何根据变量类型生成准备好的语句。喜欢对于i=0;i.长度;i++{var type=typeof valuesbytle[columns[i]]如果type==string{…如果您认为这个答案足够,请在堆栈溢出时接受它。谢谢!