使用参数插入到 SQLite 数据库中
Inserting into SQLite database with parameters
我正在使用AngularJS,Monaca和OnsenUI构建一个跨平台的应用程序。
我已经实现了一个SQLite数据库来保存数据以便能够离线工作。我的实现基于此处找到的答案
我有一个视图,用户可以在其中选择任意数量的选项,然后这些选项值应保存到SQLite数据库中。每个选项值都可以保存到同一个数据库表或单独的表中 - 具体取决于所选的选项值。
有了这个,我正在尝试重构我的插入语句以使其更有效,因为它可能会被调用很多次。在我的应用程序中.js控制器中,我有一个函数,用于检查视图中选择了哪个选项值,然后调用将所选选项值插入SQLite数据库的goInsert()函数。下面是我的函数示例。
$scope.selectedIDOne = ""; // Variable to hold selected options value
$scope.changedValue = function (item, identifier) // item = selected option value; identifier = identifies table name to insert into
{
switch (identifier)
{
case "Square":
$scope.selectedIDOne = item;
db.transaction(goInsert(identifier), errorCB, successCB); // Error on refactored goInsert(identifier) function trying to pass identifier
break;
default:
// TODO
}
}
然后我在我的goInsert()函数中尝试以下内容。
function goInsert(identifier) // Error here
{
switch (identifier)
{
case "Square":
db.transaction(insertSquareDB, errorCB, successCB);
break;
}
}
function insertSquareDB(tx)
{
tx.executeSql('INSERT OR IGNORE INTO tb_square (square_id) VALUES ("' + $scope.selectedIDOne + '" )');
}
当我运行代码时,我在指示的地方出现错误,但该值仍然插入到数据库中。该错误在 goInsert(标识符) 函数调用时引发。错误是:
类型错误: 无法在"数据库"上执行"事务"。作为参数 1 提供的回调不是函数。
请问我该如何实施此解决方案?还是有更好的方法?理想情况下,我也不想创建多个insertSquareDB(tx)函数,例如insertCircleDB(tx),insertROundDB(tx)等。有没有办法定义 1 个动态插入值的函数,例如(假设)
function insertSquareDB(tx, tableName, columnName, optionValues)
{
tx.executeSql('INSERT OR IGNORE INTO tableName (columnName) VALUES ("' + optionValues + '" )');
}
你不需要将你的goInsert(identifier)调用包装在事务中:
switch (identifier)
{
case "Square":
$scope.selectedIDOne = item;
goInsert(identifier);
...
}
如果您希望能够调用一个函数将任何形状插入到数据库中,最好的办法是动态生成 SQL 语句:
function insertShapeDB(shape, value)
{
var tableName = '';
var columnName = '';
if (shape === 'Square') {
tableName = 'tb_square';
columnName = 'square_id';
}
else if (shape === 'Circle') {
tableName = 'tb_circle';
columnName = 'circle_id';
}
else if (shape === 'Round') {
tableName = 'tb_round';
columnName = 'round_id';
}
var sql = 'INSERT OR IGNORE INTO ' + tableName + ' (' + columnName + ') VALUES (?)';
db.transaction(function(tx) {
tx.executeSql(sql, [value]);
});
}
相关文章:
- PHP:显示sqlite数据库中的html格式数据,使用tinymce保存
- 是否可以使用NativeScript使用Sqlite数据库
- 使用Javascript将多条记录插入SQLite数据库时出错
- 连接SQlite数据库
- 以html形式显示sqlite数据库中的数据(phonegap)
- 如何访问Chrome创建的SQLITE数据库
- 使用 SQL .js在 JavaScript 中加载 SQLite 数据库
- Phonegap应用程序SQLite数据库初始设置
- 将捕获的图像存储到SQlite数据库中?(科尔多瓦)
- 将SQLite数据库存储在IndexedDB中
- 有没有一种简单的方法可以通过javascript将MySQL文件导入SQLite数据库
- 我想将长文本文档解析为SQLite数据库.如何转义所有不支持的字符
- Windows 8应用程序Javascript和SQlite(数据库已锁定)
- 从sqlite数据库查询数据结果文件名
- 如何在PhoneGap应用程序中使用SQLite数据库
- 从sqlite数据库获取结果
- 为什么我可以添加一个新主题,但我可以't向SQLite数据库添加新注释
- 用PHP读取SQLite数据库?(使用sencha touch sqlite制作)
- 使用 sql.js 从磁盘读取 SQLite 数据库
- PhoneGap - 读取预打包的 sqlite 数据库