sqlite3 C API, содержащий две базы данных, создавая таблицы в одной, влияя на результаты, полученные другими - PullRequest
1 голос
/ 23 февраля 2012

Я пытаюсь использовать две базы данных для моего проекта.Одна из них уже создана и называется базой данных EPG, содержащей множество таблиц и записей.Другой - моя собственная база данных, называемая базой данных REC. Когда я открываю свою собственную базу данных, я хочу создать в ней таблицу.Итак, есть три функции, а именно:

   re_rec_db_init();
   create_table();
   re_epg_db_init();

Код для re_db_db_init () выглядит следующим образом:

   void re_epg_db_init(void)
{
    int status = sqlite3_initialize();

    s_dbepg_path=re_dbepg_get_path(); //get the path of the database

    //openrecDB

 status=sqlite3_open_v2(s_dbepg_path,&s_re_dbepg,SQLITE_OPEN_READONLY,NULL);
    //check status
      if(status!=SQLITE_OK){
   printf("\n\nerror occured in opening epg database \n");
    exit(0);
                 }

 status=sqlite3_extended_result_codes(s_re_dbepg,1);
  printf("\n\nstatus for opening the epg db is = %d \n",status);

   }

Единственная разница в re_rec_init - это другой путь, имя дескриптора и режим(SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE)

Далее, create_table () fn поможет мне создать другую таблицу в базе данных rec.Это выглядит примерно так:

void  create_table(void)
 {
    int status;
    char *sql_new;
    char *zErr;
    sql_new="create table if not exists test(Eventid VARCHAR(128) primary key,Title VARCHAR(128))";
    status=sqlite3_exec(s_re_dbrec,sql_new,NULL,NULL,&zErr);
    if(status==SQLITE_OK || status==SQLITE_DONE)
    {
    printf("\n\n table ready!! \n");
    }
    else
    {
    printf("\n\n table status: %d",status);
    }

  }

Я хочу, чтобы программа запросила в базе данных epg заданный заголовок и вернула Eventid.Но проблема возникает из-за этого метода create_tables.когда я позволю ему выполнить Eventid вернул ноль.Принимая во внимание, что, когда я закомментирую это, Eventid возвращается совершенно. Выходные данные для двух случаев:

case1: когда создается таблица

    status for opening the rec db is = 0 

    table ready!!

    enter the title to be queried:Looney Tunes

    the entered title is:Looney Tunes

    status for opening the epg db is = 0 

    success in reading the query!

    Event id of the title is:(null) //wrong!

case2: когда create_table закомментирован

  status for opening the rec db is = 0 

  enter the title to be queried:Looney Tunes

  the entered title is:Looney Tunes

  status for opening the epg db is = 0 

  success in reading the query!

  Event id of the title is:00010006014124ed //correct result!

Я действительно не знаю, как это происходит. При чтении запроса я использую стандартные команды sqlite3_prepare_v2, sqlite3_step для получения идентификатора события.Пожалуйста, помогите мне

Спасибо

1 Ответ

0 голосов
/ 23 февраля 2012

кажется, ваш указатель sqlite db ссылается на ваш новый созданный db и не обновляется при следующей инициализации.также ваш код не отражает то, что вы делаете точно.дать некоторый точный код просто.

sqlite3 *dbfile, *dbfile2;

Вы можете попробовать вставить / обновить / удалить / создать внутри открытого соединения.необходимо изменить указатель соединения на в настоящее время с использованием базы данных.

bool ConnectDB (sqlite3 dbfile)
{
    if ( sqlite3_open(DB, &dbfile) == SQLITE_OK )
    {
        isOpenDB = true;
        return true;
    }        

    return false;
}

void DisonnectDB ()
{
        if ( isOpenDB == true ) 
    {
    sqlite3_close(dbfile)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...