SQLite3 ÇÁ·Î±×·¡¹Ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

SQLite 3

2011³â 1¿ù ÇöÀç SQLite ÃֽйöÀüÀº 3.7.2 ÀÔ´Ï´Ù. ÀÌ ¹®¼­´Â SQLite3¸¦ ±âÁØÀ¸·Î ÇÕ´Ï´Ù. SQLite2 ¹öÀü ¹®¼­¸¦ º¸±â¸¦ ¿øÇÑ´Ù¸é SQLite ÇÁ·Î±×·¡¹Ö¹®¼­¸¦ º¸½Ã¸é µË´Ï´Ù.

´Þ¶óÁø Á¡

À̸§

SQLite2°ú À̸§±ÔÄ¢ÀÌ ´Þ¶óÁ³½À´Ï´Ù. sqlite2¿¡¼­ sqlite_ÀÌ Á¢µÎ»ç·Î »ç¿ëµÇ´ø °ÍÀÌ sqlite3·Î ³Ñ¾î¿À¸é¼­ sqlite3_·Î ¹Ù²¼½À´Ï´Ù.

DB Çü½Ä

µ¥ÀÌÅÍ º£À̽º ÆÄÀÏ Çü½Äµµ ¹Ù²¼½À´Ï´Ù. ±×·¡¼­ sqlite2¿¡¼­ ¸¸µç µ¥ÀÌÅͺ£À̽º ÆÄÀÏÀº sqlite3¿¡¼­ ÀÐÀ» ¼ö ¾ø½À´Ï´Ù. ¶§¹®¿¡ ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î µ¥ÀÌÅÍ º£À̽º¸¦ ¿Å°Ü¾ß ÇÕ´Ï´Ù.
# sqlite OLD.db .dump | sqlite3 NEW.db 
 

Çì´õÆÄÀÏ

Çì´õÆÄÀϵµ sqlite.h¿¡¼­ sqlite3.h·Î ¹Ù²¼½À´Ï´Ù.

¸µÅ©

-lsqlite ´ë½Å -lsqlite3¸¦ »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.

64-bit ROWID

sqlite´Â ¿£Áø¿¡¼­ insert ·¹Äڵ忡 ¹°¸®ÀûÀÎ ÀÏ·Ã ¹øÈ£¸¦ ºÎ¿©ÇÕ´Ï´Ù. ÀϷùøÈ£¸¦ ºÎ¿©Çϱâ À§ÇÑ ¹æ¹ýÀ» °í¹ÎÇØ º¸½ÅÀûÀÌ ÀÖÀ» °Ì´Ï´Ù. rowid ´öºÐ¿¡ sqlite¿¡¼­´Â À¯ÀÏÇÑ ÀϷùøÈ£¸¦ ¾ò±â À§ÇÑ °í¹ÎÀ» ÇÒ Çʿ䰡 ¾ø½À´Ï´Ù. Âü°í·Î ¸¸¾à Å×À̺íÀÇ Ä÷³À» INTEGER PRIMARY KEYÇü½ÄÀ¸·Î Çϸé rowid¸¦ °¡¸®Åµ´Ï´Ù.

ÀÌ Å©±â°¡ 32bit¿¡¼­ 64bit·Î ¹Ù²¼½À´Ï´Ù.

improved concurrency

sqlite2 ¹öÀüÀº µ¿½Ã¿¡ ¿©·¯ À¯Àú°¡ ÀÐÀ» ¼ö ÀÖµµ·Ï Çã¿ëÇßÀ¸³ª ¾²´Â °ÍÀº Çã¿ëÇÏÁö ¾Ê¾Ò½À´Ï´Ù. sqlite3´Â Àбâ¿Í ¾²±â ¸ðµÎ¿¡ µ¿½Ã Á¢±ÙÀ» Çã¿ëÇÕ´Ï´Ù.

UTF-8°ú UTF-16 Áö¿ø

UTF-8°ú UTF-16 ¸ðµÎ¸¦ Áö¿øÇÑ´Ù´Â ±º¿ä. ÁÁÀº ¼¼»óÀÔ´Ï´Ù. ?

ÇÁ·Î±×·¡¹Ö Çü½Ä

callback È£Ãâ ¹æ½Ä

callback ÇÔ¼ö¸¦ È£ÃâÇϸé Á»´õ ½±°Ô ·¹Äڵ带 ´Ù·ê ¼ö ÀÖ½À´Ï´Ù. row¿Í column´ÜÀ§·Î µ¥ÀÌÅ͸¦ ó¸®ÇÑ´ÙÀ½¿¡ ÀÌ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ callbackÀÇ ¸Å°³ º¯¼ö·Î ³Ñ°ÜÁֱ⠶§¹®ÀÔ´Ï´Ù.

#include <stdio.h> 
#include <sqlite3.h> 
#include <unistd.h> 
#include <stdlib.h> 
 
#include <string> 
#include <iostream> 
 
static int callback(void *NotUsed, int argc, char **argv, char **azColName) 
{ 
  int i; 
  for(i=0; i<argc; i++) 
  { 
    printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 
  } 
  printf("\n"); 
  return 0; 
} 
 
int main(int argc, char **argv) 
{ 
  int rc; 
  sqlite3 *mdb; 
  rc = sqlite3_open("test.db", &mdb); 
  if(rc != SQLITE_OK) 
  { 
    return 1; 
  } 
  rc = sqlite3_exec(mdb, "select * from session", callback, 0, NULL); 
  if(rc != SQLITE_OK) 
  { 
    return 1; 
  } 
 
  sqlite3_close(mdb); 
} 
 

Á÷Á¢ ´Ù·ç±â

ÄݹéÇÔ¼ö¸¦ È£ÃâÇÏ¸é °£´ÜÇÏ°Ô µ¥ÀÌÅ͸¦ ´Ù·ê ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ static ÇÔ¼ö¸¦ È£ÃâÇϱ⠶§¹®¿¡, c++µî¿¡¼­ Ãß»óÈ­ ´Ü°è¸¦ ¹âÀ¸·Á¸é ¾Ö·Î»çÇ×ÀÌ ²ÉÇÌ´Ï´Ù.

Àú´Â sqlite Ŭ·¡½º¸¦ ¸¸µé°í, µ¥ÀÌÅÍ º£À̽º¸¦ ÇÊ¿ä·Î ÇÏ´Â Çϴ Ŭ·¡½º´Â sqlite Ŭ·¡½º¸¦ »ó¼Ó¹Þ¾Æ¼­ »ç¿ëÇÏ±æ ¿øÇß½À´Ï´Ù. ÀÌ °æ¿ì callback ÇÔ¼ö¸¦ »ç¿ëÇÏ´Â °ÍÀº ÁÁÀº ¼±ÅÃÀÌ ¾Æ´Õ´Ï´Ù.

±×·¡¼­ ³·Àº ¼öÁØ¿¡¼­ Á÷Á¢ ´Ù·ç±â ¿øÇß½À´Ï´Ù.
#include <sqlite3.h> 
#include <string.h> 
#include <stdio.h> 
 
#include <iostream> 
#include <string> 
#include <vector> 
 
using namespace std; 
 
class Sqlite 
{ 
private: 
    sqlite3 *mdb; 
    string mdbname; 
    sqlite3_stmt *stmt; 
    vector<string> mRow; 
    bool classCheckFlag; 
 
public: 
    Sqlite(string adbname) 
    { 
        int rc; 
        classCheckFlag = false; 
        mdbname = adbname; 
        // DB ¿­±â 
        rc = sqlite3_open(mdbname.c_str(), &mdb); 
        if(rc == SQLITE_OK) 
        { 
            classCheckFlag = true; 
        } 
    } 
 
    ~Sqlite() 
    { 
        sqlite3_close(mdb);  
    } 
 
    bool ClassCheck() 
    { 
        return classCheckFlag; 
    } 
     
     
    int Exec(string sql) 
    { 
        int rc; 
 
        // sqlÀ» ½ÇÇàÇÑ´Ù. 
        rc = sqlite3_prepare(mdb, sql.c_str(), sql.length(), &stmt, NULL); 
        if(rc != SQLITE_OK) 
        { 
            return 1; 
        } 
        return 0; 
    } 
     
    vector<string> GetRows() 
    { 
        int rc; 
        int n; 
        int i; 
        char buf[80]; 
        mRow.clear(); 
 
        // sqlite3_step·Î row µ¥ÀÌÅ͸¦ Çϳª¾¿ °¡Á®¿Â´Ù. 
        rc = sqlite3_step(stmt); 
        if(rc != SQLITE_DONE) 
        { 
            switch(rc) 
            { 
                case SQLITE_BUSY: 
                    break; 
                case SQLITE_ERROR: 
                    break; 
                // row µ¥ÀÌÅ͸¦ °¡Á®¿Ô´Ù¸é 
                // Ä÷³ µ¥ÀÌÅ͸¦ Àоî¿Â´Ù.  
                // ±ÍÂú¾Æ¼­ Ä÷³ ŸÀÔ¿¡ °ü°è ¾øÀÌ ÀüºÎ stringÀ¸·Î ³Ö¾î¹ö·È´Ù. 
                case SQLITE_ROW: 
                    n = sqlite3_column_count(stmt); 
                    for(i = 0; i < n ; i++) 
                    { 
                        switch(sqlite3_column_type(stmt, i)) 
                        { 
                            case SQLITE_TEXT: 
                                mRow.push_back((const char *)sqlite3_column_text(stmt, i)); 
                                break; 
                            case SQLITE_INTEGER: 
                                sprintf(buf, "%d", sqlite3_column_int(stmt, i)); 
                                mRow.push_back(buf); 
                                break; 
                            case SQLITE_FLOAT: 
                                sprintf(buf, "%f", sqlite3_column_double(stmt, i)); 
                                mRow.push_back(buf); 
                                break; 
                            case SQLITE_NULL: 
                                mRow.push_back(""); 
                                break; 
                            default: 
                                cout << "Unknown Field" << endl; 
                            break; 
                        } 
                    } 
                    break; 
                case SQLITE_MISUSE: 
                    break; 
                default: 
                    break; 
            } 
        } 
        else 
        { 
            cout << "SQL Exec Complete" << endl; 
        } 
        return mRow; 
    } 
     
    void ExecFree() 
    { 
        sqlite3_finalize(stmt); 
    } 
  
    int Exec(string sql, int (*callback)(void*,int,char**,char**)) 
    { 
        int rc; 
        rc = sqlite3_exec(mdb, sql.c_str(), callback, 0, NULL); 
        if(rc != SQLITE_OK) 
        { 
            return 1;  
        } 
        return 0;  
    } 
}; 
 
int main() 
{ 
    vector<string> Row; 
    Sqlite mySql("test.db"); 
    if(!mySql.ClassCheck()) 
    { 
        return 1; 
    } 
 
    mySql.Exec("select * from address"); 
    int i; 
    for(;;) 
    { 
        Row = mySql.GetRows(); 
        if(Row.size() > 0) 
        { 
            for(i = 0; i < Row.size(); i++) 
            { 
                cout << Row[i] << "  "; 
            } 
            cout << endl; 
        } 
        else 
        { 
            break; 
        } 
    } 
    mySql.ExecFree(); 
} 
 

category_Database
category__3
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.