QT与SQLite数据库学习资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
当然我们一定要记住这个顺序,先创建数据库,然后再去创建一个表(作为菜鸟的我犯这个错误了),还有一点需要注意的红色标记的那句话,我参考的数籍一般都这样写
db.setDatabaseName(":memory:");
这样就把生成的数据库文件是在内存当中的,在工程文件目录下找不到。
上面使我们创建了一个数据库和一个表,那么我们如何把它呈现在我们的QTableview部件上呢?
QSqlTableModel *model = new QSqlTableModel;
model->setTable("person");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->select();
ui->tableView->setModel(model);
ui->tableView->show();
上面的代码就把数据库中的信息不加筛选的打印到控件上了。
第一次写博客大家多多包涵。。。
Qt中提高sqlite的读写速度
SQLite数据库本质上来讲就是一个磁盘上的文件,所以一切的数据库操作其实
都会转化为对文件的操作,而频繁的文件操作将会是一个很好时的过程,会极大地影响数据库存取的速度。例如:向数据库中插入100万条数据,在默认的情况下如果仅仅是执行query.exec("insert into DataBase(......)
values(......)");就会打开和关闭文件100万次,所以速度当然会很慢。SQLite 数据库是支持事务操作的,于是我们就可以通过事务来提高数据库的读写速度。事务的基本原理是:数据库管理系统首先会把要执行的sql语句存储到内存当中,只有当commit()的时候才一次性全部执行所有内存中的数据库。下面是一个简
单的QT sqlite数据库事务的例子:
#include
#include
#include
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSqlDatabase db_sqlite = QSqlDatabase::addDatabase("QSQLITE", "connSQLite");
db_sqlite.setDatabaseName("SQLiteDB.db3");
db_sqlite.open();
QSqlQuery query("", db_sqlite);
bool bsuccess = false;
QTime tmpTime;
// 开始启动事务
db_sqlite.transaction();
tmpTime.start();
for(int i = 0; i<100000; i++)
{
bsuccess = query.exec("insert into DataBase(D_1,D_2,D_3,D_4,D_5) values('TT','TT','TT','TT','TT')");
if (!bsuccess)
{
cout<<"Error occur"< break; } } // 提交事务,这个时候才是真正打开文件执行SQL语句的时候 db_mit(); cout<<"10000条数据耗时:"< } 其实QT 操作sqlite数据库增加事务的功能就是上面例子中蓝色字体标出的两句话,如果去掉这两句话,程序又会还原为:打开文件——执行 query.exec(...)——关闭文件。大家可以试一下,添加这两句即增加事务以后数据插入的速度明显提高很多。 在入库和更新过程中按照数据库事务的思想进行设计:SQLite执行入库、更新操作的方式是,sql语句执行对象句柄调用库函数打开文件、调用函数执行sql 语句、关闭文件。这样的执行方式对于数量级别超大的文件的弊端就是每次执行sql语句的时候都要打开文件(假设百万级数量级的数据,就要打开和关闭文件百万次),对于数据库的入库和更新操作时间主要都浪费到了文件的打开和关闭操作上,所以这里增加事务以解决该问题。 Qt数据库sqlite总结 QSqlDatabase类实现了数据库连接的操作 QSqlQuery类用来执行SQL语句 QSqlRecord类封装数据库所有记录 QSqlRelationalTableModel QSqlQueryModel QSqlTableModel 第一:QSqlDatabase类 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); 采用QSQLITE数据库db.setHostName("localhost"); //设置数据库主机名 db.setDatabaseName("test"); //设置数据库名 db.setUserName("root"); //设置数据库登入用户名 db.setPassword("123456"); //设计数据库登入密码 db.open()打开数据库连接 db.close();//释放数据库 QStringList drivers = QSqlDatabase::drivers();//静态成员函数,是类的成员函数,不是对象的.返回所有可用的数据库驱动程序的清单 drivers.removeAll("QMYSQL3"); //删除列表中的项 foreach(QString driver, drivers) //遍历数据库驱动,测试数据库驱动种类qDebug() << “\t” << driver; 第二:QSqlQuery类,查询数据库,插入值到数据库等操作数据库 QSqlQuery query; query.prepare("INSERT INTO T_USER (name, age) VALUES (:name, :age)"); query.bin dValue(":name", "justin"); //在这定占位符上确定绑定的值 query.bindValue(":age", 33); query.exec(); QSqlQuery query; //以下执行相关SQL语句 query.exec(“create table student(id int primary key,name varchar)”) //新建student表,id设置为主键,还有一个name项 query.exec(“insert into student values(1,’xiaogang’)”); query.exec(“insert into student values(2,’xiaoming’)”); query.exec(“insert into student values(3,’xiaohong’)”); //向表中插入3条记录 query.exec(“select * from student”);