![]() |
1
4
您的代码中有一个错误:很明显,在数据库关闭后,您正在使用与数据库连接相关联的sqlite准备语句! 这在逻辑上也是错误的!
但为什么它没有导致崩溃?或者为什么它看起来有效?
来自
这意味着,当您在完成(关闭)与之相关联的准备好的语句之前关闭了第一个连接时,该连接没有关闭!在关闭语句之前,它仍然是活动的,当执行语句时,它在第一个连接上执行,而不是在第二个连接上! 为什么sqlite会有这种尴尬的行为?从文档中:
但为什么它在第一个例子中失败了,而在第二个例子中却没有?好吧,即使在事务提交之前,您的应用程序也应该能够检查事务的执行语句的结果,这就是第二个示例成功的原因。 对于第一个示例:prepared语句和事务与不同的连接相关联,因此要么行为未定义,要么prepared声明无法访问第二个连接中的事务结果。 编辑:在连接上的事务内部,只有该连接可以在提交前看到该事务的结果,而在提交后,所有其他连接都可以看到其结果。这可以解释为什么在第一个示例中,第一个连接上准备好的语句在第二个连接上没有看到未提交事务的结果。 无论如何,在关闭连接本身之前,必须始终关闭与数据库连接关联的所有资源。从文档中:
|
![]() |
AstralHex · 矩阵乘法代码工作不正常 3 月前 |
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 4 月前 |
![]() |
Die4Toast · 递归调用成员箭头运算符-> 4 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 4 月前 |