开发者社区> 问答> 正文

移植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\n", azColName[i], argv[i] ? argv[i] : "NULL");
     }
     printf("\n");
     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;
}

展开
收起
杨冬芳 2016-07-13 17:51:57 3498 0
1 条回答
写回答
取消 提交回答
  • IT从业

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

    2019-07-17 19:55:56
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载