sqlite3中的一些PRAGMA语句

1.问题原由

需要修改sqlite的一些配置和数据库操作,eg. 查询THREADSAFE等编译选项。但是用的qt封装的QSqlDatabase类。无法执行sqlite源码中的一些原生函数。后面发现可以通过执行PRAGMA的一些语句来达到目的。

 

2.参考资料和使用方法

最一手的资料当然是官方的资料

https://www.sqlite.org/pragma.html

 

3.使用示例,以Qt为例

    QSqlQuery q(QSqlDatabase::database("db"));
    QVERIFY2(q.exec("PRAGMA compile_options"),         
    q.lastError().text().toLatin1().constData());
    bool hasCodec = false;
    while(q.next())
    {
        qDebug() << m_qry->value(0).toString();
    }

//sqlite源码中部分接口函数
SQLITE_API int sqlite3_threadsafe(void);
SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff);

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLite3的锁机制主要分为共享锁、独占锁和保留锁三种类型。这些锁类型的作用是为了保证数据在并发读写操作时的正确性和一致性。 1. 共享锁 共享锁是一种轻量级的锁,它允许多个读事务同时持有同一个资源的锁,但不允许写事务获取锁。多个共享锁之间不会互相阻塞,因此可以提高并发性能。共享锁的作用是保证读操作的一致性和可重复性。 2. 独占锁 独占锁是一种重量级的锁,它只允许一个事务独占一个资源的锁,其他事务无法同时获取锁,包括读操作。独占锁的作用是保证写操作的原子性和一致性。 3. 保留锁 保留锁是一种特殊的锁类型,它用于协调事务之间的锁定操作。当一个事务获取保留锁时,它可以保留一部分资源的锁,但不会阻止其他事务获取共享锁或独占锁。保留锁的作用是在事务之间协调锁的使用,避免死锁和长时间等待的问题。 在SQLite3,每个锁的类型都有对应的SQL语句进行申请和释放,如申请共享锁使用"SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE"语句,申请独占锁使用"BEGIN EXCLUSIVE"语句,申请保留锁使用"BEGIN IMMEDIATE"语句等。 需要注意的是,在SQLite3,锁的机制是自动管理的,当一个事务需要获取锁时,系统会自动分配和管理锁的状态,避免了手动管理锁的复杂性。同时,SQLite3也提供了一些PRAGMA命令来控制锁的行为,如PRAGMA locking_mode用于设置锁的模式,PRAGMA journal_mode用于设置日志模式等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值