sqlite3-移植SQLite3至MIPS不成功:调用sql语句总是产生database is locked

问题描述

移植SQLite3至MIPS不成功:调用sql语句总是产生database is locked

近期需将原本跑在ARM上面的程序移植到MIPS上,该程序调用到SQLite3的API。其中使用sqlite3_open及sqlite3_close是可以的,但是使用sqlite3_get_table和sqlite3_exec去执行sql语句(比如"select * from devices")却总会报“database is locked”的错误。

从网络得知该错误是指不能同时对一个表进行写操作,但是我使用的测试用的程序(源码见末尾)里并没有使用多线程这样的可能引起错误的诱因。而使用官方源码包里的sqlite3命令行程序,去执行sql语句时同样会产生这样的错误,而使用里面.read命令则可以顺利将整个数据库的数据读出。

使用的SQLite3包是从SQLite官网下载的,版本为3.8.11.1。还望各位能给予指导,告知解决方法。谢谢。

P.S. :最终要移植的程序、这份测试用源码、实际使用的数据库,在ubuntu和ARM上都能正常运行,在MIPS上使用时也有给予读写权限,应该不是这方面的问题。

附测试用程序源码:

#include <stdio.h>
#include <sqlite3.h>
static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
     int i;
     for(i=0; i<argc; i++){
        printf("%s = %s
", azColName[i], argv[i] ? argv[i] : "NULL");
     }
     printf("
");
     return 0;
}
#define CHECK_RC(rc,szInfo,szErrMsg,db) if(rc!=SQLITE_OK)
            {printf("%s error!/n",szInfo);
            printf("%s/n",szErrMsg);
            sqlite3_free(szErrMsg);
            sqlite3_close(db);
            return 0;}
int main(int argc, char * argv[])
{

     sqlite3 *db;
     char *dbPath="test.db";
     char *szErrMsg = 0;

     int rc= sqlite3_open(dbPath, &db);

     //CHECK_RC(rc,"open database",db);

     char *szSql="create table UserInfo(ID int primary key , UserName char, PassWord char);";
     rc=sqlite3_exec(db,szSql,0,0,&szErrMsg);
     CHECK_RC(rc,"create table",szErrMsg,db);
     rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(1,'kfqcome','123456')",0,0,&szErrMsg);
     CHECK_RC(rc,"insert info",szErrMsg,db);
     rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(2,'miss wang','654321')",0,0,&szErrMsg);
     CHECK_RC(rc,"insert info",szErrMsg,db);
     szSql="select * from UserInfo";
     rc = sqlite3_exec(db,szSql, callback, 0, &szErrMsg);
     CHECK_RC(rc,"query values",szErrMsg,db);
     sqlite3_close(db);
     getchar();
     return 0;

}

解决方案

SQLite3::BusyException: database is locked:
解决django的sqlite3的database is locked

解决方案二:

求帮助、解疑,拜托拜托,谢谢……

时间: 2024-09-17 04:39:15

sqlite3-移植SQLite3至MIPS不成功:调用sql语句总是产生database is locked的相关文章

调用sql语句实现SqlServer的备份和还原

 调用sql语句实现SqlServer的备份还原,包括完整备份和差异备份,因为执行备份还原需要一定的时间,因此需要设定 CommandTimeout参数. /// <summary> /// 备份数据库 调用SQL语句 /// </summary> /// <param name="strFileName">备份文件名</param> /// <param name="BackUpType">0表示完整备份

vb.net DataGridView绑定dataset后如何调用sql语句

问题描述 怎样调用yfk()的sql语句并显示在DataGridView1上面 解决方案 解决方案二:QUERIESTABLEADAPTER.yfk解决方案三:由VS向导生产的xsd文件中的AdapterManager类封装了一个保护属性CommandCollection,CommandCollection[0]的值一般为selectCommand的Sql命令字符串,但该属性已经被保护,所以无法在外部访问.只能通过继承的方式访问被保护的属性.你可以在xsd文件下查找相应的AdapterManag

调用SQL SERVER数据库存储过程实现ASP用户身份验证

server|存储过程|数据|数据库 在我们编写用户身份验证程序中,很容易用ASP调用SQL语句来检索数据表中是否有条件相符的记录,然后再用ASP进行相关处理. 条条道路通罗马!当然,我们也可以用SQL SERVER数据库的存储过程来轻松实现这个功能.虽然相对而言较复杂,但其效率的提升是很明显的,因为存储过程是在数据库中已经编译好的一段程序,我们只需用ASP将其所用的各种参数正确传递就行了. 本文也主要是想通过一个简单的事例,向大家介绍一下如何在ASP中调用带参数的存储过程.希望大家能从中得到更

JS调用某段SQL语句的方法_javascript技巧

如何通过JS调用某段SQL语句,这样的需求在报表.数据平台开发中很常见.以报表平台FineReport开发为例,例如在点击某个按钮之后,来判断一下数据库条数,再决定下一步操作.那这在后台如何实现呢? 解决思路 实现这个功能,首先需要了解Finereport内置的公式,SQL函数,这个肯能大家都懂,就不做介绍了. 调用FineRepor的内置公式:FR.remoteEvaluate("具体公式"),返回值为:这个具体公式的结果. 例如: var a = FR.remoteEvaluate

成功移植SQLite3到ARM Linux开发板

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口,同样比起Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快. 在开始之前,我们需要确认有 SQLit

将sqlite3移植到嵌入式Linux开发板M6708上

最近,因为项目的需要,我们购买了广州致远电子有限公司的M6708-T工控板(预装Linux系统),准备将sqlite3移植到本嵌入式开发板上.笔者参考了网上的很多文章,均无法达到成功移植的目的.在多方摸索之下,终于采用了一种简单的方法成功实现了移植.本文介绍如何成功地将sqlite3移植到M6708-T工控板上,可供相关的开发人员参考. 准备工作 在本机上安装好Linux系统(一般都是安装在虚拟机上面的),并按照工控板的用户手册在Linux系统上安装交叉开发的工具链. 将工控板上电,能够通过串口

c++-sqlite3 database is locked问题

问题描述 sqlite3 database is locked问题 sqlite3的c++ API接口使用好好的,就是重复调用sqlite3_prepare()会出现死锁问题,我自己写了个操作sqlite的类,叫Datebase.其他函数都好,但是只要第二次调用下面这个函数中的代码就会出现database is locked的错误. 解决方案 参考:http://www.cnblogs.com/Bonker/p/3445240.html 解决方案二: 这个问题看着比较简单,就是数据库被锁住了,那

vc++-请问,如果VC++6成功调用动态链接库了,那么Qt是不是也可以成功调用库?

问题描述 请问,如果VC++6成功调用动态链接库了,那么Qt是不是也可以成功调用库? 请问,如果VC++6成功调用动态链接库了,那么Qt是不是也可以成功调用库? 解决方案 VC6 工作在是windows ,QT是跨平台的, 对于同一个库文件,VC能成功调用,那么Windows平台上的QT也应该有对应的方法能成功调用,但是换换平台应该就不行了 解决方案二: 要看是什么连接库啊,看是不是Win32平台的,看是不是对质VC6编译器的,如果是就可以了.在编译器编译命令中添加库引用就可以了. 解决方案三:

Java成功访问SQL Server 2000数据库的方法

server|sql|访问|数据|数据库 摘要:本文主要介绍采用JDBC.ODBC接口实现了与SQL Server2000数据库的连接,并利用Java应用程序对其进行访问,同时通过图形用户界面实现了简单的查询功能. 关键词:Java,SQL Server,数据库 前言 数据库技术和网络技术是当今计算机领域的两大热门话题,数据库技术自产生以来,在技术上已发展成熟.而作为前端访问的开发工具和环境仍处在不断完善和发展之中,除了网络上使用的ASP.PHP.JSP作为前端连接数据库技术外,小型系统上常用访