gpt4 book ai didi

SQLite 数据库插入查询不适用于 ionic 应用程序

转载 作者:行者123 更新时间:2023-12-03 18:34:31 27 4
gpt4 key购买 nike

我正在尝试在我的 ionic 项目中添加 cordova SQLite 数据库,该项目正在扫描 qrcode 并将详细信息插入本地数据库。

我的数据库初始化是这样的:

var db = null;
var app = angular.module('scanstarter', ['ionic', 'ionic-material', 'ngCordova']);

app.run(function ($ionicPlatform, $ionicLoading, $cordovaGeolocation, $cordovaSQLite) {
$ionicPlatform.ready(function () {

document.addEventListener("deviceready", function () {
// Sqlite database initialization
db = $cordovaSQLite.openDB({name: 'scanstarter.db'});
// create table for product scan
$cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS productScan (id integer primary key, unique_id text, productName text, serialNo text, manufacturer text, department text, time text, latitude text, longitude text, actionRequired text, sync text)");
// create table for comments
$cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS comments (id integer primary key, unique_id text, comment text)");
}, false);
});

})

我的扫描功能流程是这样的:
    $scope.goToScan = function () {
cordova.plugins.barcodeScanner.scan(
function (result) {
if (!result.cancelled)
{
if (result.format == "QR_CODE")
{
var scannedData = result.text;

var posOptions = {enableHighAccuracy: true};
$cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) {
//Get latitude and longitude
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
//Initial Split with #
var splitArray = scannedData.split("#");
var UniqueId = splitArray[0];
var ProductName = splitArray[1];
var SerialNo = splitArray[2];
var Manufacturer = splitArray[3];
var Department = splitArray[4];
//Individual Split with :
var UniqueIdArray = UniqueId.split(':');
var ProductNameArray = ProductName.split(':');
var SerialNoArray = SerialNo.split(':');
var ManufacturerArray = Manufacturer.split(':');
var DepartmentArray = Department.split(':');

if ((UniqueIdArray[0] == 'unique_id') && (ProductNameArray[0] == 'product_name') && (SerialNoArray[0] == 'serial_no') && (ManufacturerArray[0] == 'manufacturer') && (DepartmentArray[0] == 'department')) {
//Insert query part start
var query = "INSERT INTO productScan (unique_id, productName, serialNo, manufacturer, department, time, latitude, longitude, actionRequired, sync) VALUES (?,?,?,?,?,?,?,?,?,?)";
$cordovaSQLite.execute(db, query, [UniqueIdArray[1], ProductNameArray[1], SerialNoArray[1], ManufacturerArray[1], DepartmentArray[1], Math.floor(Date.now() / 1000), latitude, longitude, 'N', 'N']).then(function (res) {
alert(JSON.stringify(res));

}, function (err) {
alert(JSON.stringify(err));
});
//Insert query part end
$state.go('app.scan');

} else {
alert('Invalid QR-Code. This QR-Code is not part of Inventory!.');
}

}, function (err) {
$ionicLoading.show({template: 'Kindly check your mobile GPS. GPS must be on!.'});
$timeout(function () { // server replies when username or password is incorrect
$ionicLoading.hide();
}, 3000)
});

}
}
},
function (error) {
alert("Scanning failed: " + error);
}
);
}

当我评论cordovaSQLite的插入查询部分并构建应用程序并检查它然后它成功扫描然后导航到下一页时会发生什么。但是当我取消注释并构建 apk 并在我的手机上运行它时,它不会导航到下一页。我通过在每个执行模块之后添加后续警报来看到流程正在工作,然后我发现我卡​​在了 sqlite 插入查询代码开始的地方。

这里发生的错误是什么我真的没有得到。有什么我想念的吗?

提前感谢您的快速响应。

更新

基本示例在这里
Controller 代码是这样的
    $scope.insert = function (firstname, lastname) {
alert('HI'+firstname+' '+lastname);
var query = "INSERT INTO people (firstname, lastname) VALUES (?,?)";
$cordovaSQLite.execute(db, query, [firstname, lastname]).then(function (res) {
alert('HI2');
alert("INSERT ID -> " + res.insertId);
}, function (err) {
alert(err);
});
}

$scope.select = function (lastname) {
alert('HI'+lastname);
var query = "SELECT firstname, lastname FROM people WHERE lastname = ?";
$cordovaSQLite.execute(db, query, [lastname]).then(function (res) {
alert('HI');
if (res.rows.length > 0) {
alert("SELECTED -> " + res.rows.item(0).firstname + " " + res.rows.item(0).lastname);
} else {
alert("No results found");
}
}, function (err) {
alert(err);
});
}

View 如下所示:
    <button class="button button-block button-small button-energized" ng-click="insert('sagar', 'barawade')">INSERT</button>
<button class="button button-block button-small button-energized" ng-click="select('barawade')">SELECT</button>

初始化与上面给出的相同。

在此代码上,即使我无法获得插入 id 的警报,也无法获得选择查询作为响应的警报。

最佳答案

经过一周的努力,我终于得到了它。

我需要像下面这样指定数据库

db = $cordovaSQLite.openDB({name: "biziscan.db", location: 1, iosDatabaseLocation: 'default'});

需要指定数据库的默认位置。它位于插件的 github 文件中,但尚未在 ngCordova 站点中更新。

关于SQLite 数据库插入查询不适用于 ionic 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332259/

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