60黑马QT笔记之SQLite
1 与MYSQL的区别
1)SQLite是本地数据库,不需要和MYSQL一样需要连接;
2)插入时不支持自动增长,所以主键例如id,在输入时需要自己去控制;
3)使用时需要先提前建好后缀为xxx.db的文本文件。
2 代码逻辑
//打印Qt支持的数据库驱动
qDebug() << QSqlDatabase::drivers();
// 1 添加Sqlite数据库
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
// 2 设置数据库 QSQLITE是本地数据库 不需要连接
db.setDatabaseName("C:/Users/Administrator/Desktop/MyQtCode/day08/info.db");
// 3 打开数据库
if( !db.open() )
{
QMessageBox::warning(this, "错误", db.lastError().text());
return;
}
// 4 操作(创表和插入等等)
// 注意SQLite是不支持自动增长的 所以id需要自己赋值
QSqlQuery query;
query.exec("create table student(id int primary key, name varchar(255), age int, score int);");
// ODBC风格批量插入步骤 1预处理插入占位符 2用可变列表给占位符赋值 3添加绑定 4执行预处理
// 1 预处理插入占位符
query.prepare("insert into student(name, age, score) values(?, ?, ?)");
// 2 用可变列表给占位符赋值
QVariantList nameList;
nameList << "xiaoming" << "xiaolong" << "xiaojiang";
QVariantList ageList;
ageList << 11 << 22 << 33; // age为int,不能用双引号"22"
QVariantList scoreList;
scoreList << 59 << 69 << 79;
// 3 添加绑定 按顺序绑定
query.addBindValue(nameList);
query.addBindValue(ageList);
query.addBindValue(scoreList);
// 4 执行预处理
query.execBatch();
// 最后遍历
query.exec("select * from student");
while(query.next()) //一行一行遍历
{
//取出当前行的内容
qDebug() << query.value(0).toInt()
<< query.value(1).toString()
<< query.value("age").toInt()
<< query.value("score").toInt();
}
最后可以知道,这种数据库不大,使用起来也是比较简单,如果只是小项目开发,那么保存数据的时候也是不错的选择。