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 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流
  • ¥15 Rstudio 保存代码闪退