Handling SQLite in Go when the database is locked and rows.Close().
发布时间
阅读量:
阅读量
最近的一段程序中基于SQLite数据库设计,并涉及多线程对数据库的并发操作。由于SQLite支持五种不同的锁状态:unlocked, shared, reserved, pending 和 exclusive,在执行事务时必须获取相应的锁定机制才能执行读写操作。因此,在最初的版本中并未实施任何锁定机制。具体而言,了解SQLite的各种锁状态知识可以通过查阅相关资料可以获得大量信息
我采用Golang语言编写了源代码,并采用了第三方库go-sqlite3以完成数据库功能开发。虽然未将该库直接包含在项目中但通过引入其公共接口完成了初始化并将其实现为功能模块对应的接口定义。在具体操作中,默认利用SQL对象进行处理以完成与数据库交互的功能开发工作
在执行数据库操作时遇到了此错误:'error: database is locked'。查阅相关资料后发现,在事务执行并发写操作时确实可能出现死锁现象。最初误以为这是由于死锁导致的问题,在代码层面为所有事务添加了锁定机制后仍无法解决这一问题。
到最后我硬是把数据库的所有读写操作都改为串行处理但令人感到意外的是系统仍然出现错误
最近在Stack Overflow上看到了一个问题关于SQLite 3错误:数据库被锁住(用于Go语言)。
尝试一下调用rows.Close()
当go语言在处理关系型数据库时... 通常会采用以下形式...
全部评论 (0)
还没有任何评论哟~
