C ++: создание базы данных с использованием SQLite для вставки и обновления

Я пытаюсь создать базу данных в C ++, используя sqlite3 lib .. Я получаю сообщение об ошибкеsqlite3_prepare_v2'
was not declared in this scope
 как показано в logcat.

журнальный файл

..\src\Test.cpp: In function 'int main(int, const char**)':
..\src\Test.cpp:21:85: error: 'sqlite3_prepare_v2' was not declared in this scope
..\src\Test.cpp:30:13: error: variable 'sqlite3 in' has initializer but incomplete type
..\src\Test.cpp:30:30: error: invalid use of incomplete type 'sqlite3 {aka struct sqlite3}'
..\src\/sqlite3.h:73:16: error: forward declaration of 'sqlite3 {aka struct sqlite3}'

Вот мой код

#include <iostream>
using namespace std;
 #include "sqlite3.h"

 int main (int argc, const char * argv[]) {

sqlite3 *db;
sqlite3_open("test.db", & db);

   string createQuery = "CREATE TABLE IF NOT EXISTS items (busid INTEGER PRIMARY KEY, ipaddr TEXT,    time TEXT NOT NULL DEFAULT (NOW()));";
   sqlite3_stmt *createStmt;
  cout << "Creating Table Statement" << endl;
  sqlite3_prepare_v2(db, createQuery.c_str(), createQuery.size(), &createStmt, NULL);
   cout << "Stepping Table Statement" << endl;
   if (sqlite3_step(createStmt) != SQLITE_DONE) cout << "Didn't Create Table!" << endl;

   string insertQuery = "INSERT INTO items (time, ipaddr) VALUES ('test', '192.168.1.1');"; // WORKS!


   sqlite3_stmt *insertStmt;
   cout << "Creating Insert Statement" << endl;
   sqlite3_prepare(db, insertQuery.c_str(), insertQuery.size(), &insertStmt, NULL);
   cout << "Stepping Insert Statement" << endl;
   if (sqlite3_step(insertStmt) != SQLITE_DONE) cout << "Didn't Insert Item!" << endl;

cout << "Success!" << endl;

 return 0;
}

пожалуйста, помогите мне. Спасибо.....

Ответы на вопрос(3)

Guys , creating database using sqlite3 in c/c++, here I'm using follwing steps...

1) Firstly you include MinGw file .
2) Add header file sqlite3.h, sqlite3.c in your src folder.
3) Add libr folder , in libr here include these file

    mysqlite.h, shell.c, sqlite3.c, sqlite3.h, sqlite3ext.h

Затем начните кодирование ...

     #include <iostream>
 using namespace std;
 #include "sqlite3.h"

 int main (int argc, const char * argv[]) {

    sqlite3 *db;
    sqlite3_open("test1.db", & db);

  string createQuery = "CREATE TABLE IF NOT EXISTS items (userid INTEGER PRIMARY KEY, ipaddr
      TEXT,username TEXT,useradd TEXT,userphone INTEGER,age INTEGER, "
                                                    "time TEXT NOT NULL DEFAULT 
                                                                             (NOW()));";
    sqlite3_stmt *createStmt;
    cout << "Creating Table Statement" << endl;
    sqlite3_prepare(db, createQuery.c_str(), createQuery.size(), &createStmt, NULL);
    cout << "Stepping Table Statement" << endl;
    if (sqlite3_step(createStmt) != SQLITE_DONE) cout << "Didn't Create Table!" << endl;

    string insertQuery = "INSERT INTO items (time, ipaddr,username,useradd,userphone,age) 
        VALUES ('7:30', '192.187.27.55','vivekanand','kolkatta','04456823948',74);"; // WORKS!
    sqlite3_stmt *insertStmt;
    cout << "Creating Insert Statement" << endl;
    sqlite3_prepare(db, insertQuery.c_str(), insertQuery.size(), &insertStmt, NULL);
    cout << "Stepping Insert Statement" << endl;
    if (sqlite3_step(insertStmt) != SQLITE_DONE) cout << "Didn't Insert Item!" << endl;  



         return 0;
     }
 22 апр. 2014 г., 09:43
Удивительный ответ. Большое спасибо, приятель! :-)
 01 авг. 2014 г., 18:38
Phoad, вы делаете это с помощью & quot;? & quot; или? 1? 2 и т. д. внутри запроса, а затем привязать параметры к заявлению.sqlite.org/c3ref/bind_blob.html
 14 июл. 2014 г., 09:35
Вместо того чтобы сохранять часть значений запроса вставки в виде статического текста, было бы неплохо, если бы вы обновили пример, как, после того, как инструкция подготовлена, как динамически изменять часть значений ..
Решение Вопроса
 #include <sqlite3.h>

должен содержать sqlite3_prepare_v2 и struct sqlite3. Убедитесь, что вы включили правильный файл sqlite3.h.

Также в sqlite3_prepare_v2 3-й аргумент может быть (и должен быть в вашем случае) -1, поэтому sql читается до первого нулевого терминатора.

Обработка голого металлического образца с использованием sqlite 3.7.11:

#include <sqlite3.h>
int test()
{
    sqlite3* pDb = NULL;
    sqlite3_stmt* query = NULL;
    int ret = 0;
    do // avoid nested if's
    {
        // initialize engine
        if (SQLITE_OK != (ret = sqlite3_initialize()))
        {
            printf("Failed to initialize library: %d\n", ret);
            break;
        }
        // open connection to a DB
        if (SQLITE_OK != (ret = sqlite3_open_v2("test.db", &pDb, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL)))
        {
            printf("Failed to open conn: %d\n", ret);
            break;
        }
        // prepare the statement
        if (SQLITE_OK != (ret = sqlite3_prepare_v2(pDb, "SELECT 2012", -1, &query, NULL)))
        {
            printf("Failed to prepare insert: %d, %s\n", ret, sqlite3_errmsg(pDb));
            break;
        }
        // step to 1st row of data
        if (SQLITE_ROW != (ret = sqlite3_step(query))) // see documentation, this can return more values as success
        {
            printf("Failed to step: %d, %s\n", ret, sqlite3_errmsg(pDb));
            break;
        }
        // ... and print the value of column 0 (expect 2012 here)
        printf("Value from sqlite: %s", sqlite3_column_text(query, 0));     

    } while (false);
    // cleanup
    if (NULL != query) sqlite3_finalize(query);
    if (NULL != pDb) sqlite3_close(pDb);
    sqlite3_shutdown();
    return ret;
}

Надеюсь это поможет

 05 февр. 2013 г., 15:13
очень полезно для нас, приятель ...
 Satyam06 нояб. 2012 г., 15:11
спасибо, кристиан ..
 19 мар. 2014 г., 06:41
Вот. база данных открыта ... но мне нужно создать базу данных
 01 авг. 2014 г., 18:36
Виджай, sqlite отличается от сервера БД. На самом деле это встроенный механизм БД, который использует файл для хранения вашей БД. Одна БД на файл, поэтому открытие БД означает «использовать существующую или создать новую БД».

проходить черезэтот ссылка на сайт. Я не уверен. Это может помочь вам.

Я думаю, что это не sqlite3_prepare_v2 в sqlite3.h lib, так что попробуйте это ..sqlite3_prepare_v2 can be replaced by sqlite3_prepare, but more care is needed, because it changes the semantics of subsequent calls slightly.

 01 июн. 2012 г., 14:53
с удовольствием.... :)

Ваш ответ на вопрос