gpt4 book ai didi

android - Cordova SQLite UTF8 在插入时抛出错误

转载 作者:行者123 更新时间:2023-11-30 02:21:17 24 4
gpt4 key购买 nike

我有一个用 ionic 和 cordova 编写的应用程序,可以在数据库中插入名称。数据库连接是这样打开的:

var db = window.openDatabase('zpassplus', '1.0', 'ZPass+', 1000000);

然后通过 http 从服务器获取数据,然后像这样插入到表中:

         $http({
url: settings().api_host + 'contact?token=' + $rootScope.authToken,
method: "GET",
data: {'token': $rootScope.authToken},
headers: {
'Content-Type':'application/x-www-form-urlencoded; charset=utf-8'
}
})
.success(function(data, status) {
if(data.success === true) {
db.transaction(function(tx) {

for(var i in data.data.contact.contactRiders)
{
var sqlString, active, rider = data.data.contact.contactRiders[i];

if(rider.active) {
active = 1;
} else {
active = 0;
}

sqlString = "INSERT OR IGNORE INTO riders (fname,lname,imagedata,active,riderId) VALUES('" + rider.firstName + "','" + rider.lastName + "','" + $rootScope.defaultPortrait +"'," + active + "," + rider.riderId + ")";

console.log("insert into riders: " + sqlString);
tx.executeSql(sqlString);
}

}, function(err) {
//error callback
console.log("Error processing SQL: "+err.message);
}, function(){
// this should be the last thing
console.log("rider insert success");
$location.path('/activity');
$rootScope.$apply();
});
}
})
.error(function(err) {
// ummm ....
});

问题是,当 utf8 字符串作为 rider 属性之一传递时,SQL 语句失败。因为我在执行之前有那个 console.log 我有违规的 SQL 语句,它是:

INSERT OR IGNORE INTO riders (fname,lname,imagedata,active,riderId) VALUES('Nñicole','Rock','<base64 endcode image here>',1,8824)

它抛出的错误是这样的:

Error processing SQL: near "t": syntax error

我用 base64 编码图像字符串的空字符串运行了相同的例程,得到了同样的错误,然后再次用一个空字符串作为名字运行它,它成功了。所以我很确定它是导致问题的原因。但我无法在命令行或其他任何地方复制它。此外,似乎 SQLite 应该非常适合 UTF8。我错过了什么?

最佳答案

经过长时间的疯狂鹅机会,我终于解决了这个问题。对于任何遇到这个问题的人来说,问题是转义单引号。上面几行:

sqlString = "INSERT OR IGNORE INTO riders (fname,lname,imagedata,active,riderId) VALUES('" + rider.firstName + "','" + rider.lastName + "','" + $rootScope.defaultPortrait +"'," + active + "," + rider.riderId + ")";

console.log("insert into riders: " + sqlString);
tx.executeSql(sqlString);

已更改为:

var params;
var sqlString = "INSERT OR IGNORE INTO riders (fname,lname,imagedata,active,riderId) VALUES(?,?,?,?,?)";

if(rider.portraitIncluded === true) {
params = [rider.firstName, rider.lastName, rider.portrait, active, rider.riderId];
} else {
params = [rider.firstName, rider.lastName, $rootScope.defaultPortrait, active, rider.riderId];
}

console.log("insert into riders: " + sqlString);
tx.executeSql(sqlString, params);

我的调试替换了 first_name 的所有实例,所以我错过了另一个名叫 O'Brian 或其他名字的学生。

提示:

1) 始终使用准备好的语句2) 不要像同步程序那样调试,最后写入的console.log 发生在错误的SQL 执行之后但在抛出错误之前。3) UTF8 在 cordova/javascript/http 中工作得很好如果你认为那是你的问题,那你可能错了。

关于android - Cordova SQLite UTF8 在插入时抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28512496/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com