首页 » QT » 正文

QT QSqlDatabase 操作sqlite

必要条件

Header: #include <QSqlDatabase>
qmake:  QT += sql

可以通过 qDebug() << QSqlDatabase::drivers();查看当前环境支持哪些数据库

连接数据库

bool connect(QSqlDatabase *db,const QString &dbName)
{
    *db = QSqlDatabase::addDatabase("QSQLITE");
    db->setDatabaseName(dbName);
    if (!db->open()) {
        qDebug() << "Database Error!";
        return false;
    }
    return true;
}

新建表

QSqlQuery query(db);
// 新建表
query.exec("create table outnodes (sn INTEGER NOT NULL, outport INTEGER, maxsession INTEGER, \
               ipAddress TEXT, macAddress TEXT, gateway TEXT, \
               ipMode INTEGER, rows INTEGER, cols INTEGER, \
               outHdmiMode INTEGER, outRes INTEGER)");
//向表中插入数据
query.exec("INSERT INTO outnodes (sn,outport, ipAddress,outRes) VALUES (0, 0,'192.168.10.250',100)");

删除表

query.exec("DROP TABLE outnodes");

删除项目

query.exec("DELETE FROM outnodes WHERE sn>30");

查询数据

query.prepare("SELECT * FROM outnodes WHERE sn = ?");
query.addBindValue(33);
if (!query.exec())  // 查询sn == 33的列
{
    // 出错处理 ,得 #include <QSqlError>
    qDebug() << query.lastError();
    return false;
}
else
{
    if( query.next() )
        xxx = query.value(0).toInt();
}
// 获取项目名称对应的数组编号
int nameNo = query.record().indexOf("name");//获取"name"属性所在列的编号,列从左向右编号,最左边的编号为0
while( query.next() )
{
    xxx = query.value(nameNo).toString();
}

sqlite查用语法

分页查询语句

如果查询表users中第100~150条数据
Select * From users Limit 50 Offset 100;
以上语句表示从users表获取数据,跳过100行,取50行

获取数据库中有多少数据(行数和列数)

query.exec("select * from users");
QSqlQueryModel *model = new QSqlQueryModel();
model->setQuery(query);
int nRecordCount = model->rowCount();//行数
int nColumnCount = model->columnCount();//列数

更新数据

query.prepare("UPDATE 表名 SET :name = :namename WHERE :id = :number");
query.bindValue(":name", "姓名");
query.bindValue(":namename", "张三");
query.bindValue(":id", "id");
query.bindValue(":number", 30);
// 将 id=30处的 姓名项目改为 张三
if (!query.exec()) 
    // 错误处理

发表评论