创建一个QSqlDatabase对象m_db,在操作之前需要我们用QSQLITE去驱动它链接它:m_db = QSqlDatabase::addDatabase(QLatin1String("QSQLITE"), "configdb");然后去设置它的名字/路径:m_db.setDatabaseName(path),再到后面去打开它:m_db.open();成功之后利用QSqlQuery query(m_db)对它做一系列操作
① 插入数据
sqlStr = "INSERT INTO iqcomparison (name,updatetime,value) VALUES(:name,:updatetime,:value)ON CONFLICT(name) DO UPDATE SET updatetime=:updatetime,value=:value";语句会在数据插入时检查是否有冲突的数据(name),如果有,就更新,粗体为占位符,需要后续进行绑定
query.prepare(sqlStr); query.bindValue(":name", name);query.bindValue(":value", value); bool ok = query.exec()
② 更新数据
sqlStr = "UPDATE iqmetrics_" + id + " SET value=:value,updatetime=:updatetime,pass=1 WHERE name=:name";
③ 查询选择
sqlStr = "SELECT " + fieldName + " FROM iqmetrics_" + n + " WHERE name = ?";
name = ?同name=:name都是绑定值,不同的是,前者bindValue接收一个参数(值),且绑定的顺序是按照?出现的顺序;后者bindValue(”:string”,value)接收两个值,可以不按顺序,但两个参数一定要对应
④ 删除
sqlStr = "DELETE FROM iqmetrics";
像这种简单的sql请求,可以直接用query.exec(sqlStr),当sql请求中带有参数,再使用query.prepare+bindValue+exec的组合方式,不带参数不用该方式,否则可能得不到任何数据
⑤ 创建表
sqlStr = QString("CREATE TABLE if not exists 'iqcomparison' (
'id' INTEGER UNIQUE, //字段 类型 非空性 唯一性
'name' TEXT NOT NULL UNIQUE,
'updatetime' TEXT,
'value' NUMERIC,
'unit' TEXT,
PRIMARY KEY('id' AUTOINCREMENT)
)");
⑥ 删除表
sqlStr = "DROP TABLE if exists 'iqcomparison'";