如果真 (sqlite. 打开 (“测试库.db”, #SQLITE_打开_读写 ) = 假)输出调试文本 (“打开测试库失败”)返回 ()sqlite.密码 (到字节集 (“123456”), )error = sqlite. 繁忙超时 (5000 )判断循环首 (m_onoff )error = sqlite. 开始事务 (, #S3事务锁状态_立即 )判断 (error = #SQLITE_繁忙 )输出调试文本 (“繁忙超时,其他连接正在写入数据”)到循环尾 ()判断 (error = #SQLITE_成功 )sql = “insert into test (name,age,sex) values (@name,@age,@sex)”res = sqlite. 取记录集 (sql, result )如果真 (result = 假)res. 关闭 ()到循环尾 ()name = 子程序_取随机人名 (sex )res. 绑定参数文本 (“@name”, name, ) res. 绑定参数整数 (“@age”, 取随机数 (12, 50 ), )res. 绑定参数整数 (“@sex”, sex )如果真 (res. 执行 () ≠ #SQLITE_完成 )res. 关闭 ()sqlite. 关闭 ()到循环尾 ()res.关闭 ()error = sqlite. 提交事务 ()如果真 (error = #SQLITE_繁忙 )输出调试文本 (“繁忙超时,其他连接正在读取数据”)到循环尾 () 如果真 (error ≠ #SQLITE_成功 )输出调试文本 (sqlite. 取错误文本 ()) 输出调试文本 (sqlite. 取错误文本 ()) 延时 (500 )判断循环尾 ()sqlite. 关闭 ()
最近要用到数据库多线程,看了下列子,大概知道是一个线程一个连接。这样会影响效率么??之前我是用一个连接,然后用许可证来保证读和写,发现写的时候,读变得很慢
然后看了下zy多线程的例子,有一些不太理解,例子大概就是循环的插入,更新,这样。而且数据是随机的,,但是现实中,我们的数据不是随机的。比如sqlite.开始事务 (, #S3事务锁状态_立即)这时候繁忙的时候,我们肯定不能遇到繁忙直接再循环插入数据随机,怎么遇到繁忙的时候,等待到这个线程可以写,然后再操作??
还有一点是,既然读是不影响的,为什么读的线程还要这句 error = sqlite.繁忙超时 (5000) 这句大概意思是这样的么,其他连接没有写操作,直接返回,有写操作的话,等待5秒返回。可是既然事务立即不影响读操作,为什么要加这一句??!
|