0

私はSqlite3が初めてです。私は C++ インターフェイス、特に合併を使用しています。データベースは、rw 権限、具体的には 0x644 を持つ tmp フォルダーに作成されています。テーブルを書き込もうとすると、エラー SQLITE_IOERR_LOCK (3850) が発生します。私は QNX os で実行しています。これを解決するにはどうすればよいですか?

ありがとう!

bool myApp::Start()
{
   bool retVal = false;
   int rc, ret;
   char sql [] = "CREATE TABLE IF NOT EXISTS ZPL_CMDS(" \
                 "id       INT PRIMARY KEY   NOT NULL," \
                 "myCount  INT               NOT NULL );" ;
   char *zErrMsg = 0;

   // initialize engine
   if (SQLITE_OK != (ret = sqlite3_initialize()))
   {
       printf("Failed to initialize library: %d\n", ret);
   } else {
   printf("SQLITE3 library Initialized!\n");
   }

   rc = sqlite3_open("/tmp/zplCmd.db", &db);

   if(!sqlite3_extended_result_codes(db, 1))
   {
  printf("SQLITE3: extended result codes turned ONs\n");
  }
  else
  {
     printf("SQLITE3: extended result codes turned OFF\n");
  }

  if( rc ){
      printf("Can't open database: %s\n", sqlite3_errmsg(db));
      return(0);
  }else{
  printf("Opened database successfully: %s\n", sqlite3_errmsg(db));
  }

   /* write tables */
   rc = sqlite3_exec(db, sql, NULL, 0, NULL); // <-- my code fails here

   if( rc != SQLITE_OK ){
   printf("SQL error: %s, %d\n", sqlite3_errmsg(db), rc);
   sqlite3_free(zErrMsg);
   } else {
     printf("Table created successfully\n");
   }

retVal を返します。}

4

1 に答える 1

0

問題は、QNX のロック メカニズムにあります。

rc = sqlite3_open_v2(path.c_str(), &database, SQLITE_OPEN_READWRITE,"unix-none") worked for me

VFS オプション "unix-none" は、ロック メカニズムを無効にします。

理由の詳細: https://www.sqlite.org/vfs.html

于 2021-09-16T08:35:33.757 に答える