QT上的Sqlite数据库操作

1.Sqlite数据库连接的创建

	QString connString = QCoreApplication::applicationDirPath();  //程序运行的目录
    connString += "\\test.db";
    QSqlDatabase m_database = QSqlDatabase::addDatabase("QSQLITE");
    m_database.setDatabaseName(connString);

    if( !m_database.open() )
    {
        qDebug() << __FILE__ << __LINE__ << "warning: database not connect. " << m_database.lastError() << "\n";
        return false;
    }

2.表的增、删、改操作

	int row = 0;
    if (!m_database.isValid())//数据库不存在
    {
        return -1;
    }
    if ((!m_database.isOpen()) && (!m_database.open()))//数据库没打开
    {
        qCritical() << QObject::tr("database error: ")
                    << m_database.lastError().text();
        return -1;
    }
    sqlQuery.exec("SET client_encoding=GBK");
    try
    {
        if (sqlQuery.prepare(query))//将 SQL 语句模板化或者说参数化
        {                           //优势为:一次编译、多次运行,省去了解析优化等过程;同时能防止 SQL 注入。
            
            sqlQuery.exec(query);   //执行
        }
        rows = sqlQuery.numRowsAffected();
        if (query.startsWith("insert", Qt::CaseInsensitive))
        {
            if (rows > 0)
            {
                rows = sqlQuery.lastInsertId().toInt();
            }
        }
    }
    catch(...)
    {
        //m_database.rollback();
        qCritical() << QObject::tr("database error: ")
                    << m_database.lastError().text();
    }
    return row; //返回搜影响的行数,可以用于判断是否操作成功(SELECT不可用)

2.1 数据的预处理数据绑定

     对于一个QString模板: QString str = "SELECT * FROM  %1"
    可以使用str.arg(TableName);绑定参数

     而一个sql模板:QString sql = "SELECT * FROM  ?"
    使用:query.prepare(sql)
    可以使用:query.bindValue(0,一个值);
    再使用query.exec(sql);执行

3.表的查询操作

	QSqlQuery sqlQuery(m_database);
    sqlQuery.exec("SET client_encoding=GBK");
    try
    {
         sqlQuery.setForwardOnly(true);
        //在每次利用QSqlQuery获取下一条记录时,若不开启isForwardOnly,
        //则每次都开辟新的内存空间,来存储已经访问及未访问的记录,这样,
        //每次都会浪费好多存储空间;而开启isForwardOnly模式,则每次只存储一条记录。

        while(sqlQuery.next())
        {
            result.append(sqlQuery.record());
        }
    }
    catch(...)
    {
        //m_database.rollback();
        qCritical() << QObject::tr("database error: ")
                    << m_database.lastError().text();
    }

4.其他常用操作

4.1 初始化记录的字段

void TbStudent::initQSqlRecord(QSqlRecord &record)
    {
        QSqlField field1(ID);
        record.append(field1);

        QSqlField field2(AGE);
        record.append(field2);

        QSqlField field3(NAME);
        record.append(field3);

        QSqlField field4(SALARY);
        record.append(field4);

        QSqlField field5(CODE);
        record.append(field5);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值