доступ к sqlite с помощью программы C - PullRequest
1 голос
/ 13 января 2010

Ядро сброшено при запуске этой программы:

int main(void) {
   sqlite3 *conn;
   int     error = 0;

  error = sqlite3_open("cloud_db.sqlite3", &conn);
  if (error) {
          puts("Can not open database");
          exit(0);
  }

  error = sqlite3_exec(conn,
          "update server set servername=\'Laks\' where ipaddress=\'192.168.1.111\'",
        0, 0, 0);
  if (error) {
          puts("Can not update table");
          exit(0);
  }
  sqlite3_close(conn);

  return 0;
}

Я попытался получить доступ (выбрать запрос) к SQLite, используя C, и он показывает содержимое - это нормально Как я могу использовать такие запросы, как обновление? Выше я пытаюсь выполнить запрос как:

update server set servername="Laks" where ipaddress="192.168.1.111";

Выполнение этого запроса в sqlite> работает нормально. Как выполнить (обновить запрос) это из программы на C?

Ответы [ 2 ]

1 голос
/ 13 января 2010

Поскольку вы указываете, что проблема существует, когда оператор содержит «servername = \ 'Laks \'» и удаляется, если вы измените его на «servername = Laks», я полагаю, обратная косая черта является причиной проблемы. Вам не нужны обратные слэши, чтобы избежать апострофа в строковых литералах. Просто используйте "servername = 'Laks'". Вы избегаете кавычек (") в строковых литералах и апострофов (') в символьных литералах, но не наоборот.

Вам также необходимо добавить точку с запятой (;) в конце строки запроса: «любой текст оператора sql;».

0 голосов
/ 13 января 2010

sharptooth включен, когда спрашивает, какое утверждение приводит к дампу ядра. Поскольку вы не ответили, я думаю, вы, возможно, не знаете, как это сделать.

Прежде всего, убедитесь, что ваша программа составлена ​​с отладочными символами. Предполагая, что вы используете gcc, вы делаете это, имея -g в командной строке.

Далее, убедитесь, что ваша среда будет записывать файлы ядра. Сделайте это с помощью команды оболочки ulimit -c unlimited (при работе в sh, bash и т. Д.) Или limit core unlimited (при работе в csh).

Запустите программу и дайте ей сбой.

Далее, вызовите ядро ​​в gdb с помощью gdb programname corename.

Наконец, запустите команду backtrace в gdb, чтобы увидеть, где произошел сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...