必要条件
1 2 3 |
Header: #include <QSqlDatabase> qmake: QT += sql |
可以通过 qDebug() << QSqlDatabase::drivers();
查看当前环境支持哪些数据库
连接数据库
1 2 3 4 5 6 7 8 9 10 11 |
bool connect(QSqlDatabase *db,const QString &dbName) { *db = QSqlDatabase::addDatabase("QSQLITE"); db->setDatabaseName(dbName); if (!db->open()) { qDebug() << "Database Error!"; return false; } return true; } |
新建表
1 2 3 4 5 6 7 8 9 |
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");
查询数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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行
获取数据库中有多少数据(行数和列数)
1 2 3 4 5 6 |
query.exec("select * from users"); QSqlQueryModel *model = new QSqlQueryModel(); model->setQuery(query); int nRecordCount = model->rowCount();//行数 int nColumnCount = model->columnCount();//列数 |
更新数据
1 2 3 4 5 6 7 8 9 |
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()) // 错误处理 |