zoukankan      html  css  js  c++  java
  • Qt4访问sqlite数据库

    sqlite简介

    sqlite 是一款轻量级的、基于文件的嵌入式数据库,2000年就已经诞生,经过7年多的发展,直到今天已经成为最流行的嵌入式数据库,包括google在内的公司 在其桌面软件中亦使用 sqlite 存储用户数据。由此可以看出,已经没有任何理由去怀疑sqlite的稳定性了。

    sqlite的优势

    1. 免配置,和access一样,只要把数据库文件通过ftp上传到服务器上就可以使用,不需要服务器的额外支持

    2. 备份方便,因为只是一个文件,只要复制一份该文件,就能备份整个数据库

    3. 虽然是轻量级数据库,但他支持最大 2tb 的单个库文件。

    4. 快,无与伦比的快。经过实际测试,在几百万记录的情况下,sqlite的插入和查询速度和 mysql 不分上下,快于 sql server,10倍于 access (但这并不意味着它可以替代 sql server )

    用QT操作sqlite

    由于sqlite属于轻量级的数据库,不需要配置,不需要安装,也不需要管理员,所以也就没必要像操作mysql等数据库一样的设置主机,用户和密码了。样例如下:

    #include <QApplication>
    #include <QTextEdit>
    #include <QString>
    #include <QSqlDatabase>
    #include <QSqlQuery>
    #include <QSqlError>
    #include <QSqlDriver>
    #include <QDateTime>
    #include <QDebug>
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QTextEdit display;
        display.resize(400, 160);
        display.show();  //下面进行数据库的设置
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  //使用sqlite数据库驱动 
        db.setDatabaseName("test");  //我们之前建立的数据库
    bool ok = db.open();  //尝试连接数据库
    if (ok)
        {  //这里用text已经成功连上数据库
            QSqlQuery query;  //新建一个查询的实例
    if (query.exec("select * from student"))   //尝试列出 student 表的所有记录
            {  //本次查询成功
    int numRows = 0;  //询问数据库驱动,是否驱动含有某种特性 
    if (db.driver()->hasFeature(QSqlDriver::QuerySize))
                {
                    numRows = query.size();  //如果支持结果影响的行数,那么直接记录下来
                }
    else
                {
                    query.last(); //否则定位到结果最后,qt 文档说,这个方法非常慢
                    numRows = query.at() + 1;
                    query.seek(-1);
                }
                QString name, age;
                display.append("==========================================="); 
    while(query.next())
                {  //定位结果到下一条记录
                    name = query.value(0).toString();
                    age = query.value(1).toString();
                    QString result = name + " " + age;
                    display.append(result);
                }
                display.append("===========================================");
                display.append(QString("totally %1 rows").arg(numRows) );
            }
    else
            {  //如果查询失败,用下面的方法得到具体数据库返回的原因
                QSqlError error = query.lastError();
                display.append("From mysql database: " + error.databaseText());
            }
        }
    else
        {  //打开数据库失败,显示数据库返回的失败描述
            display.append("cannot open database.");
            display.append("Reason: " + db.lastError().databaseText());
        }
        QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));
    return app.exec();
    }

  • 相关阅读:
    POJ 1015 Jury Compromise【DP】
    POJ 1661 Help Jimmy【DP】
    HDU 1074 Doing Homework【状态压缩DP】
    HDU 1024 Max Sum Plus Plus【DP,最大m子段和】
    占坑补题。。最近占的坑有点多。。。
    Codeforces 659F Polycarp and Hay【BFS】
    Codeforces 659E New Reform【DFS】
    Codeforces 659D Bicycle Race【计算几何】
    廖大python实战项目第四天
    廖大python实战项目第三天
  • 原文地址:https://www.cnblogs.com/bennylam/p/1691355.html
Copyright © 2011-2022 走看看