Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Базы данных > SQLite и C++ Для Чайников


Автор: NikGK 31.5.2010, 10:03
Помогите плиз разобраться "младенцу в программировании":  smile 

ни разу не работал с ДБ, да и с С++ пока на Вы... 

подскажите где скачать SQLite, а самое главное : как собрать из исходников( если потребуется), или как там ещё моно с SQLite работать.., и как обращатся к ней из проекта???

(а то уже вторую неделю никак не могу разобраться smile )

P.S. проект делаю на VS2008 на C++ 
Заранее благодарю от всего сердца!!!

Автор: borisbn 31.5.2010, 10:38
Качаешь исходник http://sqlite.org/sqlite-amalgamation-3_6_23_1.zip,
подключаешь его в свой проект, включаешь в свой исходник h-ник sqlite'а, и вызываешь http://sqlite.org/c3ref/funclist.html.
А http://sqlite.org/quickstart.html про SQLite.

Автор: Alca 31.5.2010, 12:14
http://www.codeproject.com/KB/database/CppSQLite.aspx

Автор: mrbrooks 31.5.2010, 12:42
NikGK, если исходить из 
Цитата(NikGK @  31.5.2010,  11:03 Найти цитируемый пост)
Помогите плиз разобраться "младенцу в программировании"

то не будет ли проще воспользоваться SQLite ODBC Driver или SQLite OLE DB Provider?

Автор: Cheloveck 31.5.2010, 14:36
Вот тут (svn checkout http://sqlite3pp.googlecode.com/svn/trunk/ sqlite3pp-read-only) есть http://ru.wikipedia.org/wiki/%D0%92%D1%80%D0%B0%D0%BF%D0%BF%D0%B5%D1%80для C++, использующий http://ru.wikipedia.org/wiki/Boostдля ухода от колбеков, которые есть не C++ way.
Использовать очень легко, н/р
Код

    try
    {
        ::SetCurrentDirectory(m_cur_dir);
        sqlite3pp::database db(m_db_filename);
        sqlite3pp::command c(db, "CREATE TABLE users ("
            "name TEXT  PRIMARY KEY NOT NULL, password TEXT  NOT NULL);");
        c.execute();
    }
    catch(sqlite3pp::database_error & e)
    {
    }

Автор: NikGK 31.5.2010, 20:00
извените, я правельно понял, что ничего компилить не нужно?!

borisbn 
там по ссылке 5 файлов (2 С, 2H и EDF):

я правельно понимаю что чтобы работать с Sqlite нужно  просто включить в свой проект sqlite3.h (типо : #include "sqlite3.h")
         и после в своих классах обращаться к уже имеющимся функциям SQLite-а???

И ещё такой вопрос: для чего нужен Sqlite.dll на офф сайте его тоже говорят скачать...

Ещё раз прошу меня извинить, я действительно только второй месяц изучаю программирование... smile 

Автор: Cheloveck 31.5.2010, 22:10
NikGK, все *.c файлы добавляешь в проект. dll в таком случае не нужна. Если будешь использовать чистые исходники SQLite, то там не будет никаких классов, классы будут, если будешь использовать враппер. Но для враппера надо скомпилировать будет boost, это для новичка посложнее задача.

Автор: NikGK 1.6.2010, 12:58
еммм... тут вот такая проблемка:
у меня есть набор С++ библиотек "OGRE"(движок рендеринга), с ним более менее разобрался,
но вот он написан на С++ и там всё на классах...,
при таком варианте как прикруть SQLite?

С с С++ как взаимодействуют? возможно подключить sqlite.h как включаемый фаил и обращаться к его функциям из классов OGRE???

или как ето можно вообще сделать???

Ребят, если есть возможность, можете обьяснить как совсем полному чайнику??? smile 

Автор: mrbrooks 1.6.2010, 13:03
мда. второй месяц. исходники sqlite. теперь уже ogre. 

автор, учи матчасть. не с того начинаешь.

Автор: NikGK 1.6.2010, 13:30
учу учу... просто OGRE както легко пошёл...  smile   много удачных примеров да и инфы...
а вот с sqlite сложнее...

Автор: borisbn 1.6.2010, 16:42
Цитата(NikGK @  1.6.2010,  12:58 Найти цитируемый пост)
С с С++ как взаимодействуют

Из исходников C++ просто вызываются функции С.
Файл my_class.cpp
Код

#include "sqlite3.h"

bool MyClass::connect( const char * dbFileName )
{
    if ( NULL == dbFileName )
    {
        return false;
    }
    if ( m_db )
    {
        sqlite3_close( m_db );
        m_db = NULL;
    }
    int res = sqlite3_open( dbFileName, &m_db );
    if ( SQLITE_OK != res )
    {
        return false;
    }
    return true;
}


}

Автор: NikGK 2.6.2010, 09:20
ну тоесть как я говорил:
 
Цитата

я правельно понимаю что чтобы работать с Sqlite нужно  просто включить в свой проект sqlite3.h (типо : #include "sqlite3.h")
         и после в своих классах обращаться к уже имеющимся функциям SQLite-а???


???

а основные фенкции SQLite-a, на сколько я понимаю, ето: 


sqlite3_open()
sqlite3_exec()
sqlite3_close()

тогда ещё вопрос: подскажите плиз, как обращаться к определённой константе лежащей в базе (допустим там уже загружен какой-небудь .png)
(если возможно, можно пример с классами smile заранее благодарю! smile )


Автор: borisbn 2.6.2010, 09:38
Цитата(NikGK @  2.6.2010,  09:20 Найти цитируемый пост)
просто включить в свой проект sqlite3.h

В проект включаются исходники (sqlite3.c), а h-ники включаются в исходники ( но это просто, по терминологии smile )
По сути. В базе лежат не константы, а записи. Каждая запись состоит из набора полей. У каждого поля есть имя и тип. Для картинки, скорее всего, был выбран тип BLOB, и доставать его из базы нужно примерно так:
Код

sqlite3_stmt * stmt = NULL;
sqlite3_prepare( m_db, "select png_data from table_name where id=0", -1, &stmt, NULL );
sqlite3_step( stmt )
const char *pngBytes = (const char *)sqlite3_column_blob( stmt, 0 );
unsigned int pngSize = sqlite3_column_bytes( stmt, 0 );


Автор: NikGK 2.6.2010, 11:32
во! smile  спасибо огромное!!! вроде бы разобрался! smile 

Автор: 0123456 7.8.2010, 17:58
База Врапперов для SQLITE3 http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers

Автор: suxxor 15.10.2010, 21:14
Вопрос по сабжу

у меня не получается скомпилировать даже такой код (85 errors):

Код

#include "sqlite3.c"

int main()
{
  return 0;
}


как правильно написать чтобы работал без DLL smile

Автор: Cheloveck 16.10.2010, 12:01
Код

#include "sqlite3.h"

и при этом надо ВСЕ файлы SQLite включить в проект

Автор: suxxor 16.10.2010, 13:12
Cheloveck, огромное спасибо!

А как можно минимизировать размер выходного файла, у меня на выходе получается ~200-400 Кб (в зависимости от свойств проекта)

при таком коде:

Код

#include <stdio.h>
#include <iostream>
#include "sqlite3.h"

int main()
{
      sqlite3 *db;
      char *zErrMsg = 0;
      int rc;

      rc = sqlite3_open("DBm", & db);
      if(rc)
      {
            fprintf( stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
            sqlite3_close( db );
            system("pause");
            return 1;
      }

      rc = sqlite3_exec(db, "SELECT * from UserData", NULL, 0, &zErrMsg);
      if(rc!=SQLITE_OK)
      {
            fprintf(stderr, "SQL error: %s\n", zErrMsg);
            system("pause");
            sqlite3_free(zErrMsg);
            return 1;
      }

    system("pause");
}

Автор: Sanderland 29.11.2011, 12:00
Господа, заранее прошу прощения, но сил у меня уже нет.
простейший код..... он даже не мой. я его скачал для ознакомления с работой sqlite. Но у меня он отказываеться компилиться!
Код

#include <stdio.h>
#include <conio.h>
#include <sqlite3.h> 
main () {
printf ("Hello world SQLite!");
    char *db_name="test.sl3";
   // sqlite3 *db;
    sqlite3* db;
    char *zErrMsg = 0;
    int error;

    //Создание или открытие БД
    error = sqlite3_open(db_name, &db);
    if ( error )
    {
        printf("Can't open database: ");
        printf("sqlite3_errmsg(db)");
        sqlite3_close(db);
    }

  getch();
}


очень надеюсь на вашу помощь.

Автор: vardara 12.1.2012, 21:29
Модератор: Сообщение скрыто.

Автор: Cheloveck 13.1.2012, 21:23
Sanderland, может еще и ошибку компилятора покажешь?

Автор: dix75 1.3.2012, 23:35
Интересно.
А кто какой фраппер использует?

Хочу попробовать SOCI. STL подобный, что не может не радовать.

Автор: larchik099 4.4.2012, 10:05
Цитата(NikGK @ 2.6.2010,  11:32)
во! smile  спасибо огромное!!! вроде бы разобрался! smile

Заглянула на форум. И, к моему изумлению,   сразу нашла ответ на интересующую меня тему. Спасибо! smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)