当先锋百科网

首页 1 2 3 4 5 6 7

在qt开发过程中,有时候会有一些配置需要我们保存记录,如果对于这些配置的只是单纯的保存,那么我们可以有多种选择,一般会选择比较简单的ini配置文件,或者xml文件,但是有时候会有多套需要保存,那么ini和xml就显得不太实用了, 这里就有必要用到qt自带的一个小型数据库sqlite,下面就项目开发中,sqlite的使用,做下详细的说明。

  首先,在新建的QT creator工程中的pro文件中添加sqlite的配置,QT+=sql,或者直接在QT+=core gui后边直接添加sql,执行qmake即可,这样sqlite就添加到我们的工程中了。

在.h文件中,添加sqlite的头文件,

#include<QSqlDatabase>

#include<QSqlQuery>

#include<QSqlRecord>

#include<QSqlError>

在使用sqlite时,第一步添加驱动:

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");

第二步,设置数据库名称:

db.setDatabaseName("./my.db");

if (!db.open())

{
        qDebug() << "open db failed!";

}

第三步,创建数据表:

QString createSql = QString("create table if not exists student(

                                                id integer primary key not null,

                                                user_name text not null,

                                                ip text not null,

                                                port int not null,

                                                password text not null)");

QSqlQuery *pQuery = new QSqlQuery();

pQuery->prepare(createSql);

if (pQuery->exec())

{
        qDebug() << "Error : Fail to create table." << pQuery->lastError();

}

第四步,增删改查操作

插入数据:

注:id类型时integer,默认时自增类型,不用重复赋值。

pQuery->prepare("insert into student(user_name,ip,port,password) values(:userName,:ip,:port,:password)");

pQuery->bindValue(:userName,"user1");

pQuery->bindValue(:ip,"127.0.0.1");

pQuery->bindValue(:port,"5000");

pQuery->bindValue(:password,"*****");

pQuery->exec();

删除数据:

pQuery->prepare("delete from student where id = :id");

qQuery->bindValue(:id,"1");

如果表中有自增序列,这里的id就是自增序列,直接调用delete from student是不能把自增序列删除掉的, 还必须调用delete from student where name = 'student',这样就可以把该表的递增数归零。

更新数据:

pQuery->prepare("update student set password = '*****' where user_name = 'user1';

pQuery->exec();

查询数据并获取结果集:

pQuery->prepare("select * from student");

pQuery->exec();

QSqlRecord record = pQuery->record();

int column = record.count();

typedef struct _testInfo

{

        int id;

        QString userName;

        QString ip;

        QString port;

        Qstring password;

}testInfo;

QVector<testInfo> m_infoVect;

while(pQuery->next())

{

        testInfo tmp;

        tmp.id = pQuery->value("id").toInt();

        tmp.userName = pQuery->value("user_name").toString();

        tmp.ip = pQuery->value("ip").toString();

        tmp.port = pQuery->value("port").toString();

        tmp.password = pQuery->value("password").toString();

        m_infoVect.push_back(tmp);

}

以上操作就把查询到的数据拿到本地内存中了,如果时测试可以打印出来看下这些数据。

for (int i=0;i<m_infoVect.size();i++)

{

        qDebug() << m_infoVect[i].id << ":"

                        << m_infoVect[i].userName << ":"

                        << m_infoVect[i].ip << ":"

                        << m_infoVect[i].port << ":"

                        << m_infoVect[i].password ;

}

总结,以上是sqlite的简单操作,希望有所帮助!