wishlist 2015-10-16 02:43 采纳率: 0%
浏览 1910

移植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;

}

  • 写回答

1条回答 默认 最新

  • wishlist 2015-10-19 01:13
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch