如何使用通用函数将数据插入 sqlite 数据库
Posted
技术标签:
【中文标题】如何使用通用函数将数据插入 sqlite 数据库【英文标题】:How to insert Data into sqlite Database using a generic function 【发布时间】:2019-08-30 10:06:52 【问题描述】:我正在编码的函数将从其他 javascript 文件中调用,并且字段和值将传递给函数,包括表名。但是当我运行该函数时,它只会给出错误而没有此错误消息
We have encounter an Error WebSQLTransaction "_complete": false, "_error": null, "_running": true, "_runningTimeout": false, "_sqlQueue": Queue "first": undefined, "last": undefined, "length": 0, , "_websqlDatabase": WebSQLDatabase "_currentTask": TransactionTask "errorCallback": [Function anonymous], "readOnly": false, "successCallback": [Function anonymous], "txnCallback": [Function anonymous], , "_db": SQLiteDatabase "_closed": false, "_name": "mydb.db", , "_running": true, "_txnQueue": Queue "first": Object "item": TransactionTask "errorCallback": [Function anonymous], "readOnly": false, "successCallback": [Function anonymous], "txnCallback": [Function anonymous], , "next": Object "item": TransactionTask "errorCallback": [Function anonymous], "readOnly": false, "successCallback": [Function anonymous], "txnCallback": [Function anonymous], , "next": Object "item": TransactionTask "errorCallback": [Function anonymous], "readOnly": false, "successCallback": [Function anonymous], "txnCallback": [Function anonymous], , , , , "last": Object "item": TransactionTask "errorCallback": [Function anonymous], "readOnly": false, "successCallback": [Function anonymous], "txnCallback": [Function anonymous], , , "length": 3, , "version": "1.0", ,
所以我使用 javascript React native 构建它并使用 expo SDK。 Expo 在 SQLite 模块中发布,同样,我正在做的是构建一个可以从代码中的任何位置调用的函数,并将一些数据放入数据库。
export const insert = (tbl, fields, values) =>
const query = "insert into $tbl ($fields) values ($values);";
console.log(query);
//it looks fine to me
db.transaction(trx =>
let trxQuery = trx.executeSql(
query
,[values],(data)=> console.log('we made it',data),(err)=>console.log('We have encounter an Error', err))
console.log(trxQuery); // retruns undefined
)
这就是我调用函数的方式
const personObj = JSON.parse(personDetails);
Object.keys(personObj).map(i =>
insert('users','name, address, hash', [personObj[i].name, personObj[i].address, personObj[i].hash])
)
我希望获得we made it
的控制台日志以及有关我们插入的数据的信息。感谢您的帮助
【问题讨论】:
【参考方案1】:成功和错误回调有两个参数,第一个是事务本身,第二个是错误或结果集。您应该像下面这样编辑您的代码并检查结果集对象,
`export const insert = (tbl, fields, values) =>
const query = "insert into $tbl ($fields) values ($values);";
console.log(query);
//it looks fine to me
db.transaction(trx =>
let trxQuery = trx.executeSql(
query
,[values]
,(transact,resultset) => console.log('we made it',resultset)
,(transact,err) => console.log('We have encounter an Error', err)
);
)
`
【讨论】:
以上是关于如何使用通用函数将数据插入 sqlite 数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何将时间戳插入 SQLite 数据库列?使用函数时间('现在')?
如何使用 android 中的 SQLite 扩展类在数据库中插入值?
Java SQLite 数据库,插入条目给出 nullPointerException