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

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

我正在尝试使用准备好的语句将一行数据写入 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/

相关文章:

javascript - 导入外部脚本时出现 404

javascript - 如何删除具有属性 contentEditable 的 div 中的 HTML 元素?

mysql - Django 全文搜索 mysql

c# - 使用 Linq C# 的联接中的正则表达式?

java - 如何从 BLOB 数据类型 SQLite JDBC 创建唯一标识符

java - 通过 Java 写入 Oracle 数据库导致 ORA-00604 和 ORA-01000

java - 是否允许重新打包Oracles JDBC驱动程序?

javascript - 如何获取CSS类中元素的属性集

javascript - 在 Bootstrap-select 中动态选择多个值不起作用

PHP 高级搜索错误