3 个解决方案
#1
不了解SQLite,但从错误信息判断,大概你执行插入数据的方法里面,本身就默认开启了一个事务,
然后在外面再开启一次,检查源代码,保证开启一次,
比如
BEGIN
insert .....
insert ...
insert ...
COMMIT
这样是对的,
你的是这样
BEGIN
BEGIN
insert ...
COMMIT
BEGIN
insert ...
COMMIT
BEGIN
insert...
COMMIT
COMMIT
这是错误的。
然后在外面再开启一次,检查源代码,保证开启一次,
比如
BEGIN
insert .....
insert ...
insert ...
COMMIT
这样是对的,
你的是这样
BEGIN
BEGIN
insert ...
COMMIT
BEGIN
insert ...
COMMIT
BEGIN
insert...
COMMIT
COMMIT
这是错误的。
#2
还有谁了解吗?我在线程里面判断是否已经开启第一个事务,如果开启则不再开启第二个,但是还是报错的!
#3
sqlite3_open("status.db", &m_sqlite_conn);//打开一个sqlite连接。
sqlite3_exec(m_sqlite_conn, "begin transaction", 0, 0, 0);//显示开启一个事务
//操作3个表,操作中间出错时可以回滚事务“rollback transaction”
sqlite3_exec(m_sqlite_conn, "commit transaction", 0, 0, 0);//提交事务
sqlite3_exec(m_sqlite_conn, "begin transaction", 0, 0, 0);//显示开启一个事务
//操作3个表,操作中间出错时可以回滚事务“rollback transaction”
sqlite3_exec(m_sqlite_conn, "commit transaction", 0, 0, 0);//提交事务
#1
不了解SQLite,但从错误信息判断,大概你执行插入数据的方法里面,本身就默认开启了一个事务,
然后在外面再开启一次,检查源代码,保证开启一次,
比如
BEGIN
insert .....
insert ...
insert ...
COMMIT
这样是对的,
你的是这样
BEGIN
BEGIN
insert ...
COMMIT
BEGIN
insert ...
COMMIT
BEGIN
insert...
COMMIT
COMMIT
这是错误的。
然后在外面再开启一次,检查源代码,保证开启一次,
比如
BEGIN
insert .....
insert ...
insert ...
COMMIT
这样是对的,
你的是这样
BEGIN
BEGIN
insert ...
COMMIT
BEGIN
insert ...
COMMIT
BEGIN
insert...
COMMIT
COMMIT
这是错误的。
#2
还有谁了解吗?我在线程里面判断是否已经开启第一个事务,如果开启则不再开启第二个,但是还是报错的!
#3
sqlite3_open("status.db", &m_sqlite_conn);//打开一个sqlite连接。
sqlite3_exec(m_sqlite_conn, "begin transaction", 0, 0, 0);//显示开启一个事务
//操作3个表,操作中间出错时可以回滚事务“rollback transaction”
sqlite3_exec(m_sqlite_conn, "commit transaction", 0, 0, 0);//提交事务
sqlite3_exec(m_sqlite_conn, "begin transaction", 0, 0, 0);//显示开启一个事务
//操作3个表,操作中间出错时可以回滚事务“rollback transaction”
sqlite3_exec(m_sqlite_conn, "commit transaction", 0, 0, 0);//提交事务