起因:在写数据库的时候不想每次插入数据都要考虑主键的自增,因为不想在ui去写主键字段,也不想在ui节目维护这个主键,只想做一个简单数据库,但是又要对用户信息进行修改,就需要一个唯一标识,这个时候考虑到用户姓名应该允许重名,并且用手机号也好像不太行,就只剩下加个主键了。
百度了一下只有SQLite3以上的支持主键自增,所以就想看一下当前qt版本的SQLite是什么版本,这个时候就有人要问了,为什么不直接测测试一下呢,别问,问就是我非要看看能不能用qml查到SQLite的版本
现在写这篇文章的时候发现,主键是支持自增的,但是加不加AUTOINCREMENT是有区别的12
直接上关键部分的代码:
function dbGetVersion()
{
var db = dbGetHandle()
db.transaction(function (tx) {
var results= tx.executeSql('SELECT sqlite_version()')
var keys = Object.keys(results.rows.item(0));
console.log(keys.length)
for(var i = 0; i < keys.length; i++) {
var key = keys[i];
console.log("item(0)"+key + ': ' + results.rows.item(0)[key]);
}
console.log("keys[0] "+keys[0])
console.log("dbGetVersion:"+results.rows.item(0)[sqlite_version] )
})
}
输出:
qml: 1
qml: item(0)sqlite_version(): 3.36.0
qml: keys[0] sqlite_version()
qrc:/Database.js:146: ReferenceError: sqlite_version is not defined
可以看到 keys[0] 里面的内容是sqlite_version() ,但是results.rows.item(0)[sqlite_version] 就不行,我也没搞清楚,但是可以这样:
console.log("dbGetVersion:"+results.rows.item(0)[keys[0]] )
就可以正确输出了:
qml: dbGetVersion:3.36.0
//这里提一下关于results的类型,结论是:results.rows.item(0)
var results= tx.executeSql('SELECT sqlite_version()')
//可以用 var keys = Object.keys(results); 去遍历
var results= tx.executeSql('SELECT sqlite_version()')
var keys = Object.keys(results);
console.log(keys.length)
for(var i = 0; i < keys.length; i++) {
var key = keys[i];
console.log(key + ': ' + results[key]);
qml: rowsAffected: 0
qml: insertId:
qml: rows: [object Object]
至于item(0)这个[object Object]是什么则可以用上述方法去遍历就行了