ошибка открытия базы данных sqlite с помощью c ++

0

Я следовал примеру программирования sqlite в c++ http://cplus.about.com/od/howtodothingsin1/a/tutorial-two-With-SQLite-and-c.htm

Вот часть моего кода:

#include <iostream>
#include <string>
#include <cstring>
#include <sstream>
#include "sqlite3.h"

  sqlite3 *db;
  sqlite3_stmt *stmt;
  char message[255];

  // open the database                                                                                                                       
  int db_open = sqlite3_open(dbname, &db);
  if (db_open != SQLITE_OK)
    {
      cout << "Failed to open database " << sqlite3_errstr(db_open) << '\n';
      sqlite3_close(db);
      exit(0);
    }
  cout << "Opened db " << dbname << "OK\n";

  //prepare the sql                                                                                                                          
  int db_prepare = sqlite3_prepare_v2(db, sql, strlen(sql) + 1, &stmt, NULL);
  if (db_prepare != SQLITE_OK)
    {
      cout << "Failed to prepare database " << sqlite3_errstr(db_prepare) << '\n';
      sqlite3_close(db);
      exit(0);
    }

Я получил эту ошибку, предлагая мне использовать sqlite3_errmsg вместо sqlite3_errstr (который существует). Почему это?

db2class.cpp:31:45: error: use of undeclared identifier 'sqlite3_errstr'; did you mean 'sqlite3_errmsg'?
      cout << "Failed to open database " << sqlite3_errstr(db_open) << '\n';
                                            ^~~~~~~~~~~~~~
                                            sqlite3_errmsg
/usr/include/sqlite3.h:2754:24: note: 'sqlite3_errmsg' declared here
SQLITE_API const char *sqlite3_errmsg(sqlite3*);
                       ^
db2class.cpp:31:60: error: cannot initialize a parameter of type 'sqlite3 *' with an lvalue of type 'int'
      cout << "Failed to open database " << sqlite3_errstr(db_open) << '\n';
                                                           ^~~~~~~
/usr/include/sqlite3.h:2754:47: note: passing argument to parameter here
SQLITE_API const char *sqlite3_errmsg(sqlite3*);
                                              ^
db2class.cpp:41:48: error: use of undeclared identifier 'sqlite3_errstr'; did you mean 'sqlite3_errmsg'?
      cout << "Failed to prepare database " << sqlite3_errstr(db_prepare) << '\n';
                                               ^~~~~~~~~~~~~~
                                               sqlite3_errmsg
/usr/include/sqlite3.h:2754:24: note: 'sqlite3_errmsg' declared here
SQLITE_API const char *sqlite3_errmsg(sqlite3*);
                       ^
db2class.cpp:41:63: error: cannot initialize a parameter of type 'sqlite3 *' with an lvalue of type 'int'
      cout << "Failed to prepare database " << sqlite3_errstr(db_prepare) << '\n';
                                                              ^~~~~~~~~~
/usr/include/sqlite3.h:2754:47: note: passing argument to parameter here
SQLITE_API const char *sqlite3_errmsg(sqlite3*);
Теги:
sqlite3

2 ответа

0
Лучший ответ

В учебнике рассказывается, как загрузить последнюю версию SQLite.

Вы не сделали этого, поэтому используете более старую версию, которая еще не имеет функции sqlite3_errstr.

(BTW; использование sqlite3_errstr в этом случае неверно; sqlite3_errmsg возвращает сообщение с более полезной информацией.)

0

Проверьте версию sqlite.

Версия, в которой была добавлена sqlite3_errstr, была версия 2012-12-12 (3.7.15).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню