一、模块引入.pro添加数据库模块proQT sql二、SQLite文件数据库无需服务嵌入式首选SQLite Qt 内置驱动开箱即用。cpp运行#include QSqlDatabase #include QSqlQuery #include QSqlError // 1. 创建数据库连接 QSqlDatabase db QSqlDatabase::addDatabase(QSQLITE); db.setDatabaseName(test.db); // 数据库文件路径 if(!db.open()) { qDebug() 打开失败 db.lastError().text(); return; } // 2. 建表 QSqlQuery query; query.exec(CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)); // 3. 插入数据 query.exec(INSERT INTO user(name) VALUES(张三)); // 4. 查询数据 query.exec(SELECT * FROM user); while(query.next()) { int id query.value(0).toInt(); QString name query.value(1).toString(); qDebug() id name; }三、MySQL 连接需驱动 服务端cpp运行QSqlDatabase db QSqlDatabase::addDatabase(QMYSQL); db.setHostName(127.0.0.1); db.setPort(3306); db.setDatabaseName(dbname); db.setUserName(root); db.setPassword(123456); if(!db.open()) { qDebug() MySQL 连接失败 db.lastError().text(); }四、预处理语句防 SQL 注入cpp运行QSqlQuery query; query.prepare(INSERT INTO user(name) VALUES(:name)); query.bindValue(:name, 李四); query.exec();五、数据库事务多条 SQL 要么全部执行成功要么全部回滚。cpp运行db.transaction(); // 开启事务 bool ok1 query.exec(INSERT INTO user(name) VALUES(A)); bool ok2 query.exec(INSERT INTO user(name) VALUES(B)); if(ok1 ok2) db.commit(); // 提交 else db.rollback(); // 回滚小结本地单机、嵌入式优先 SQLite服务端、多客户端选用 MySQL复杂批量操作务必使用事务保证数据一致性。
Qt 高阶 03|Qt 数据库开发 SQLite/MySQL 连接、QSqlQuery、事务使用
一、模块引入.pro添加数据库模块proQT sql二、SQLite文件数据库无需服务嵌入式首选SQLite Qt 内置驱动开箱即用。cpp运行#include QSqlDatabase #include QSqlQuery #include QSqlError // 1. 创建数据库连接 QSqlDatabase db QSqlDatabase::addDatabase(QSQLITE); db.setDatabaseName(test.db); // 数据库文件路径 if(!db.open()) { qDebug() 打开失败 db.lastError().text(); return; } // 2. 建表 QSqlQuery query; query.exec(CREATE TABLE IF NOT EXISTS user(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT)); // 3. 插入数据 query.exec(INSERT INTO user(name) VALUES(张三)); // 4. 查询数据 query.exec(SELECT * FROM user); while(query.next()) { int id query.value(0).toInt(); QString name query.value(1).toString(); qDebug() id name; }三、MySQL 连接需驱动 服务端cpp运行QSqlDatabase db QSqlDatabase::addDatabase(QMYSQL); db.setHostName(127.0.0.1); db.setPort(3306); db.setDatabaseName(dbname); db.setUserName(root); db.setPassword(123456); if(!db.open()) { qDebug() MySQL 连接失败 db.lastError().text(); }四、预处理语句防 SQL 注入cpp运行QSqlQuery query; query.prepare(INSERT INTO user(name) VALUES(:name)); query.bindValue(:name, 李四); query.exec();五、数据库事务多条 SQL 要么全部执行成功要么全部回滚。cpp运行db.transaction(); // 开启事务 bool ok1 query.exec(INSERT INTO user(name) VALUES(A)); bool ok2 query.exec(INSERT INTO user(name) VALUES(B)); if(ok1 ok2) db.commit(); // 提交 else db.rollback(); // 回滚小结本地单机、嵌入式优先 SQLite服务端、多客户端选用 MySQL复杂批量操作务必使用事务保证数据一致性。