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

Àüü ÇÔ¼ö/¿ë¾î»çÀü
ÇöÀçÀ§Ä¡ : ¹Ì´Ï»çÀÌÆ®>SQLite>Document>article_article_SQLite_ÇÁ·Î±×·¡¹Ö


Sqlite ÇÁ·Î±×·¡¹Ö

Sqlite ÇÁ·Î±×·¡¹Ö

À±»ó¹è

                yundream@join.co.kr
            

고친 과정
고침 0.92004³â 2¿ù 16ÀÏ 8½Ã
Âü°í¹®Çå¹× »çÀÌÆ® Ãß°¡
고침 0.82004³â 1¿ù 09ÀÏ 20½Ã
ÃÖÃÊ ¹®¼­ÀÛ¼º

1. ¼Ò°³

Áö±Ý±îÁö Oracle, Mysql, Postgresql °ú °°Àº Å« ±Ô¸ðÀÇ DBÇÁ·Î±×·¡¹ÖÀ» ÇØ¿ÔÀ¸¸ç ÀÛÀº ±Ô¸ð¿¡¼­ °£´ÜÇÏ°Ô »ç¿ëÇϱâ À§ÇÑ ¿ëµµ·Î gdbm °ú °°Àº ¶óÀ̺귯¸®¸¦ »ç¿ëÇß¾ú´Ù. À̵éÀÇ ¹®Á¦´Â Oracle, Mysql, PostgresqlÀº Àû´çÇÑ ±â´ÉÀ» Áö¿øÇϱâ À§Çؼ­ Áö³ªÄ¡°Ô ¹«°Ì´Ù´Â Á¡À̰í, gdbm°ú °°Àº °æ¿ì ¸Å¿ì °¡º±°í °£´ÜÇϱâ´Â ÇÏÁö¸¸ ±â´ÉÀÌ ³Ê¹« Á¦ÇÑÀûÀ̰í SQL¹®¹ýÀ» Áö¿øÇÏÁö ¾Ê´Â´Ù´Â Á¡ÀÌ´Ù. ±×·¯´øÁß Sqlite¸¦ ¾Ë°Ô µÇ¾ú´Ù. À¥ÇÁ·Î±×·¡¹Öµµ °âÇÏ´Ùº¸´Ï Á»´õ °¡º­¿î DBµµ±¸¸¦ ã¾Æ Çì¸Þ´øÁß ¹ß°ßÇß´Ù. ÀÌ ¹®¼­´Â SqliteÀÇ ¼³Ä¡¿Í ÇÁ·Î±×·¡¹Ö Ȱ¿ë¹æ¾Èµî¿¡ ´ëÇÑ ³»¿ëÀ» ´ã°í ÀÖ´Ù.

¹®¼­´Â Linux OS¸¦ ±âÁØÀ¸·Î ÀÛ¼ºµÇ¾ú´Ù. Windowsȯ°æ¿¡¼­ÀÇ SQLiteÀÇ ¼³Ä¡¿¡ ´ëÇÑ ÈùÆ®¸¦ ¾ò°í ½Í´Ù¸é SWLite Windows¸¦ Âü°íÇϱ⠹ٶõ´Ù.

¶ÇÇÑ SQLiteÀÀ¿ë ÇÁ·ÎÁ§Æ®µµ ÀÖÀ¸´Ï ÀÌ ±ÛÀ» ÀÐÀºÈÄ °ü½ÉÀÌ »ý°å´Ù¸é ÇѹøÂë ã¾ÆÁÖ±æ ¹Ù¶õ´Ù. SQLiteDBMS ÇÁ·ÎÁ§Æ®·Î °¡±â


2. Sqlite

ÇöÀç ½ÃÁ¡¿¡¼­ ÃֽйöÁ¯ÀÎ sqlite-2.8.9¸¦ ±âÁØÀ¸·Î ÇÑ´Ù.


2.1. SqliteÀÇ Æ¯Â¡

  1. SQL92ÀÇ ´ëºÎºÐÀ» Áö¿øÇÑ´Ù. ´ÙÀ½Àº Áö¿øÇÏÁö ¾Ê´Â ¸î °¡Áö ±â´ÉµéÀÌ´Ù.

  2. ´ÜÀÏ ÆÄÀÏ¿¡ µ¥ÀÌÅͺ£À̽ºÀÇ ¸ðµç°ÍÀ» Æ÷ÇÔÇÑ´Ù.

  3. ACID(Atomic, Consistent, Isolate, Durable) º¸Áõ

  4. byte order¿¡ °ü°è¾øÀÌ µ¥ÀÌÅÍ ÆÄÀÏÀÇ °øÀ¯°¡ °¡´É

  5. 2Å×¶ó¹ÙÀÌÆ® (2^41)Å©±âÀÇ µ¥ÀÌÅÍ ÆÄÀÏ »ý¼ºÁö¿ø

  6. È¿À²ÀûÀÎ ¸Þ¸ð¸® »ç¿ë : 25k¶óÀÎÁ¤µµÀÇ CÄÚµå·Î ÀÌ·ç¾îÁ³´Ù.

  7. ¸¹Àº ÀϹÝÀûÀÎ ¸í·ÉÀ» ½ÇÇàÇϴµ¥ PostgreSql°ú Mysqlº¸´Ù ÃÖ¼Ò 2¹èÀÌ»ó ¸í·É¿¡ µû¶ó¼­ 10-20¹è ÀÌ»ó ºü¸£´Ù.

  8. ÇϳªÀÇ ±¸Á¶Ã¼¿Í 3°³ÀÇ ÇÔ¼ö¸¸ »ç¿ëÇÏ´Â Á¤µµ·Î sqlite¸¦ »ç¿ëÇÏ´Â C/C++ Äڵ带 ¸¸µé¾î ³¾ ¼ö ÀÖ´Ù.

  9. TCL, Perl, PHP, .Net, Java, Python, SmallTalk, RubyµîÀÇ ´Ù¾çÇÑ ¾ð¾îÁö¿ø

  10. ´Ù¸¥ ¶óÀ̺귯¸®µîÀÇ µµ¿ò¾øÀÌ ÀÛµ¿µÈ´Ù. libsqlite.so¿Í sqlite 2°³ÀÇ ÆÄÀÏÀ̸é ÀÛµ¿ ȯ°æÀ» ¸¸µé ¼ö ÀÖ´Ù.

  11. Public Domain ¶óÀ̼¾½º¸¦ °¡Áø´Ù.

  12. sqlite´Â ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨À» Áö¿øÇÏ´Â RDBMS°¡ ¾Æ´Ï´Ù. ·ÎÄÿ¡¼­¸¸ »ç¿ë°¡´ÉÇϸç ÀÎÅͳÝÀÀ¿ëÀ» ¿øÇÑ´Ù¸é º°µµÀÇ ¼­¹ö ÇÁ·Î±×·¥À» ¸¸µé¾î¾ß ÇÑ´Ù.


2.2. ¼³Ä¡Çϱâ

SQLite ȨÆäÀÌÁö¿¡¼­ ´Ù¿î·Îµå ¹ÞÀ» ¼ö ÀÖ´Ù. ÇöÀç(2003/1/08) sqlite-2.8.9.tar.gz ¹öÁ¯ÀÌ ÃֽŹöÁ¯ÀÌ´Ù. ´Ù¿î·Îµå ¹Þ¾Æ¼­ ¾ÐÃà±îÁö Ç®°í º¸´Ï 4MÁ¤µµ µÇ´Â ÀÛÀº Å©±â¿´´Ù. oracleÀº ¸»ÇÒ °Íµµ ¾ø°í ¼ö½Ê¸Þ°¡ÀÇ Å©±â¸¦ °¡Áö´Â postgresqlÀ̳ª mysql¿¡ ºñÇØ¼­µµ ¸Å¿ì ÀÛÀº Å©±âÀÌ´Ù.

rpmµµ ÁغñµÇ¾î ÀÖ±â´Â Çѵ¥, ¼­¹ö ÇÁ·Î±×·¥µéÀº ¹«Á¶°Ç ÄÄÆÄÀÏÇØ¼­ ¼³Ä¡ÇØ¾ß ÇÏ´Â ¼º°ÝÀ̶ó tarballÀ» ¹Þ¾Æ¼­ ÄÄÆÄÀÏ ÈÄ ¼³Ä¡Çϱâ·Î Çß´Ù. ´ÙÀ½Àº ÇÊÀÚ°¡ »ç¿ëÁßÀÎ ¸®´ª½º¹Ú½ºÀÇ »ç¾çÀÌ´Ù.

표 1. ½Ã½ºÅÛ »ç¾ç

OSLinuxKernel 2.6.0
ÄÄÆÄÀÏ·¯gcc2.96
cpuIntel 800MHZ¾÷±×·¹ÀÌµå ½ÃŰ°í ½Í´Ù.

¼³Ä¡´Â ¸Å¿ì °£´ÜÇÏ´Ù.

# wget http://www.hwaci.com/sw/sqlite/sqlite-2.8.9.tar.gz
# mv sqlite-2.8.9.tar.gz /usr/src
# tar -xvzf sqlite-2.8.9.tar.gz
# cd sqlite
# ./configure
# make 
# make install
            
¿É¼Ç¾øÀÌ ¼³Ä¡ÇßÀ» °æ¿ì /usr/local ¹Ø¿¡ ÀÚ¸®Àâ°Ô µÈ´Ù. À̰ɷΠ¼³Ä¡ ³¡ÀÌ´Ù.


3. Sqlite °£´Ü ¿î¿ë

3.1. DB »ý¼º¹× °£´ÜÇÑ ³»ºÎ¸í·É¾îµé

sqlite [dbname] À¸·Î °£´ÜÇÏ°Ô »ý¼ºÇÒ ¼ö ÀÖ´Ù. µ¿ÀÏÇÑ À̸§ÀÌ Á¸ÀçÇÏ¸é ¿­°í ±×·¸Áö ¾Ê´Ù¸é »õ·Î »ý¼ºÇÑ´Ù.

# sqlite test.db
SQLite version 2.8.9
Enter ".help" for instructions
sqlite> 
            
±×´ÙÀ½ ºÎÅÍ´Â ¾Ë°í ÀÖ´Â Sql query¸¦ ÀÌ¿ëÇØ¼­ ÇÊ¿äÇÑ ÀÛ¾÷À» ÇÏ¸é µÈ´Ù.
sqlite> create table test(name char(80), age int);
sqlite> insert into test values("yundream", 19);
sqlite> insert into test values("hello world", 29);
sqlite> select * from test;
yundream|19
hello world|29
            
³»ºÎ¸í·É¾î¿Í °ü·ÃµÈ µµ¿ò¸»Àº '''.help'''¸¦ ÀÔ·ÂÇÏ´Â Á¤µµ·Î °£´ÜÈ÷ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.

  1. .databases : ÇöÀç ÀÛ¾÷ÁßÀÎ DBÆÄÀϰú °ü·ÃµÈ ´Ù¸¥ ÆÄÀÏµé ¸ñ·Ï Ãâ·Â

  2. .echo ON|OFF : ¸í·É¾î¸¦ ¹ÝÇâ ÇÒ°ÇÁö ¿©ºÎ

  3. .exit : ÇÁ·Î±×·¥ Á¾·á

  4. .help : µµ¿ò¸»

  5. .schema ?TABLE? : Å×ÀÌºí ±¸Á¶

  6. .show : ÇöÀç ÇÁ·Î±×·¥ ¼³Á¤°ªÀ» º¸¿©ÁØ´Ù.

  7. .read FILENAME : FILENAMEÀ¸·Î ºÎÅÍ SQLÀ» ½ÇÇàÇÑ´Ù.

  8. .output FILENAME : Ãâ·ÂÀ» FILENAMEÀ¸·Î º¸³¿

  9. .output stdout : Ãâ·ÁÀ» È­¸éÀ¸·Î º¸³¿(±âº» °ª)

  10. .output stdout : Ãâ·ÁÀ» È­¸éÀ¸·Î º¸³¿(±âº» °ª)


4. C/C++ Interface

sqlite´Â ¸Å¿ì ½±°Ô °ü·Ã ¾ÖÇø®ÄÉÀ̼ÇÀ» Á¦ÀÛÇÒ ¼ö ÀÖµµ·Ï µðÀÚÀεǾî ÀÖ´Ù. ¿©±â¿¡¼­´Â sqlite C/C++ÇÁ·Î±×·¡¹Ö ¹æ¹ý¿¡ ´ëÇØ¼­ ¾Ë¾Æ º¸°Ú´Ù.


4.1. ÇÙ½É API

sqlite´Â 3°³ÀÇ ÇÙ½É ÇÔ¼ö¿Í ÇϳªÀÇ ÀڷᱸÁ¶¸¦ Á¦°øÇÑ´Ù. À̿ܿ¡µµ ¸î°¡Áö ¸®Åϰª°ú »ó¼öµéÀ» °¡Áö°í ÀÖ´Ù.

typedef struct sqlite sqlite;
#define SQLITE_OK

sqlite *sqlite_open(const char *dbname, int mode, char **errmsg);

void sqlite_close(sqlite *db);

int sqlite_exec
(
  sqlite *db,
  char *sql,
  int (*xCallback)(void*,int,char**,char**),
  void *pArg,
  char **errmsg
);
            
À§ÀÇ ³»¿ë¸¸ ¼÷ÁöÇÏ´Â Á¤µµ·Î C,C++ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖ´Ù.


4.2. DB ¿­±â

            sqlite *sqlite_open(const char *dbname, int mode, char **errmsg);
            
sqlite_open ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ SQLite DB¸¦ ¿­°Å³ª »õ·Î¿î DB¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Ù. ù¹øÂ° ÀÎÀÚ´Â DBÀ̸§ÀÌ´Ù. µÎ¹øÂ° ÀÎÀÚ´Â ÇöÀç »ç¿ëÇÏÁö ¾Ê´Â´Ù. DB¸¦ ¿©´Â Áß¿¡ ¿¡·¯°¡ ¹ß»ýÇÑ´Ù¸é errmsg¿¡ ¿¡·¯¸Þ½ÃÁö¸¦ ä¿ì°Ô µÈ´Ù. ¿¡·¯°¡ ¹ß»ýÇÏÁö ¾Ê¾Ò´Ù¸é NULLÀ» °¡¸®Å²´Ù.


4.3. DB´Ý±â

sqlite_close()ÇÔ¼ö¸¦ È£ÃâÇÏ¸é µÈ´Ù. ÀÎÀڷδ sqlite_open()À¸·Î »ý¼ºµÈ sqlite ±¸Á¶Ã¼ Æ÷ÀÎÅͰ¡ µé¾î°£´Ù. sqlite_close()¸¦ È£ÃâÇßÀ» ¶§ Æ®·£Àè¼Ç(transaction)ÀÌ È°¼ºÈ­ µÇ¾î ÀÖ´Â »óŶó¸é ÀÌ Æ®·£Àè¼ÇÀº rolled back ÇÏ°Ô µÈ´Ù.


4.4. SQL ½ÇÇà

sqlite_exec()¸¦ ÀÌ¿ëÇØ¼­ SQLÄõ¸®¿Í °¢Á¾ ¸í·ÉÀ» ¼öÇàÇÒ ¼ö ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â 5°³ÀÇ ÀÎÀÚ¸¦ °¡Áø´Ù.

  1. sqlite_open()¿¡ ÀÇÇØ¼­ ¸¸µé¾îÁø sqlite±¸Á¶Ã¼ Æ÷ÀÎÅÍ´Ù.

  2. sql Äõ¸®¿Í sql ¸í·ÉÀ» À§ÇÑ ¹®ÀÚ¿­ÀÌ µé¾î°£´Ù. ÀÌ ¹®ÀÚ¿­Àº null·Î ³¡³­´Ù.

  3. ÄݹéÇÔ¼ö·Î½á Äõ¸®ÀÇ °á°ú¸¦ ó¸®Çϱâ À§Çؼ­ È£Ã⠵ȴÙ. NULL À̶ó¸é ¾Æ¹«Àϵµ ÇÏÁö ¾Ê°Ô µÈ´Ù.

  4. ÄݹéÇÔ¼ö·Î ³Ñ°ÜÁÙ ÀÎÀÚÀÇ Ã³À½À» °¡¸£Å°´Â Æ÷ÀÎÅÍ´Ù.

  5. ¿¡·¯¸Þ½ÃÁö¸¦ °¡¸£Å°´Â Æ÷ÀÎÅÍ´Ù. ÀÌ Æ÷ÀÎÅÍ´Â malloc()µîÀ» ÀÌ¿ëÇØ¼­ ÇÒ´çµÈ °ø°£¿¡ ¾º¿©Áö¸ç ÇÔ¼ö°¡ Á¾·áµÇ¸é free() µÈ´Ù. NULLÀ̶ó¸é ¾î¶² ¿¡·¯¸Þ½ÃÁöµµ º¸°íµÇÁö ¾ÊÀ» °ÍÀÌ´Ù.

Äݹé(callback)ÇÔ¼ö´Â Äõ¸®ÀÇ °á°ú¸¦ ¹Þ±â À§Çؼ­ »ç¿ëµÈ´Ù. ÄݹéÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ ¼±¾ðµÇ¾î ÀÖ´Ù.

int Callback(void *pArg, int argc, char **argv, char **columnNames))
{
    return 0;
}
            
ÄݹéÇÔ¼öÀÇ Ã¹¹øÂ° ÀÎÀÚ´Â sqlite_exec()ÀÇ ³×¹øÂ° ¾Æ±Ô¸ÕÆ®ÀÇ º¹»ç´Ù. ÀÌ ÀÎÀڴ Ŭ¶óÀÌ¾ðÆ® ÄÚµå·Î ºÎÅÍ ÄݹéÇÔ¼ö·Î ÀÓÀÇÀÇ Á¤º¸¸¦ Àü´ÞÇϱâ À§Çؼ­ »ç¿ëµÇ¾î Áø´Ù. µÎ¹øÂ° ÀÎÀÚ´Â Äõ¸®°á°ú »ý¼ºµÈ Ä÷³(columns)ÀÇ °¹¼öÀÌ´Ù. ¼¼¹øÂ° ¾Æ±Ô¸ÕÆ®´Â Ä÷³ÀÇ ½ÇÁ¦ ³»¿ëÀ» ´ã°í ÀÖÀ¸¸ç ÇϳªÀÇ Ä÷³ ³»¿ëÀº ÇϳªÀÇ ¹è¿­¿¡ ´ëÀÀÇÑ´Ù. ³×¹øÂ° ÀÎÀÚ´Â Ä÷³ÀÇ À̸§ÀÌ´Ù.

ÄݹéÇÔ¼ö´Â Á¤»óÀûÀ¸·Î ¼öÇàµÇ¾úÀ» °æ¿ì 0À» ¸®ÅÏÇÑ´Ù. ¸¸¾à ¿¡·¯°¡ ¹ß»ýÇÑ´Ù¸é 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇϰí Äõ¸®´Â Ãë¼ÒµÈ´Ù. À̰æ¿ì sqlite_exe()´Â SQLITE_ABORT¸¦ ¸®ÅÏÇÒ °ÍÀÌ´Ù.


4.5. ¿¡·¯ ÄÚµå

Á¤»óÀûÀ¸·Î ½ÇÇàµÇ¾úÀ» °æ¿ì sqlite_exec()ÇÔ¼ö´Â SQLITE_OK¸¦ ¸®ÅÏÇÑ´Ù. ±×·¸Áö ¾ÊÀ»°æ¿ì ´ÙÀ½°ú °°Àº ¿¡·¯ ÄÚµåµéÀ» ¸®ÅÏÇÑ´Ù.

#define SQLITE_OK           0   /* Successful result */
#define SQLITE_ERROR        1   /* SQL error or missing database */
#define SQLITE_INTERNAL     2   /* An internal logic error in SQLite */
#define SQLITE_PERM         3   /* Access permission denied */
#define SQLITE_ABORT        4   /* Callback routine requested an abort */
#define SQLITE_BUSY         5   /* The database file is locked */
#define SQLITE_LOCKED       6   /* A table in the database is locked */
#define SQLITE_NOMEM        7   /* A malloc() failed */
#define SQLITE_READONLY     8   /* Attempt to write a readonly database */
#define SQLITE_INTERRUPT    9   /* Operation terminated by sqlite_interrupt() */
#define SQLITE_IOERR       10   /* Some kind of disk I/O error occurred */
#define SQLITE_CORRUPT     11   /* The database disk image is malformed */
#define SQLITE_NOTFOUND    12   /* (Internal Only) Table or record not found */
#define SQLITE_FULL        13   /* Insertion failed because database is full */
#define SQLITE_CANTOPEN    14   /* Unable to open the database file */
#define SQLITE_PROTOCOL    15   /* Database lock protocol error */
#define SQLITE_EMPTY       16   /* (Internal Only) Database table is empty */
#define SQLITE_SCHEMA      17   /* The database schema changed */
#define SQLITE_TOOBIG      18   /* Too much data for one row of a table */
#define SQLITE_CONSTRAINT  19   /* Abort due to contraint violation */
#define SQLITE_MISMATCH    20   /* Data type mismatch */
#define SQLITE_MISUSE      21   /* Library used incorrectly */
#define SQLITE_NOLFS       22   /* Uses OS features not supported on host */
#define SQLITE_AUTH        23   /* Authorization denied */
#define SQLITE_ROW         100  /* sqlite_step() has another row ready */
#define SQLITE_DONE        101  /* sqlite_step() has finished executing */
            
´ÙÀ½Àº °¢ ¿¡·¯ÄÚµåµé¿¡ ´ëÇÑ ¼³¸íÀÌ´Ù.

SQLITE_OK

¸í·ÉÀÌ Á¤»óÀûÀ¸·Î ¼öÇàµÇ¾ú´Ù.

SQLITE_INTERMAL

SQLite libraryÀÇ ³»ºÎÀûÀÎ ¹®Á¦·Î ¹ß»ýÇϴµ¥, SQLite ¶óÀ̺귯¸®ÀÇ ¹ö±×¿¡ ÀÇÇØ¼­¸¸ ¹ß»ýµÈ´Ù°í µÇ¾î ÀÖ´Ù. ¸¸¾à ÀÌ ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é SQLite mailing list¿¡ ¹®Á¦¸¦ º¸°íÇϱ⠹ٶõ´Ù.

SQLITE_ERROR

SQL¿¡ ¹®Á¦°¡ ÀÖÀ» °æ¿ì ¹ß»ýµÈ´Ù.

SQLITE_PERM

µ¥ÀÌÅÍÆäÀ̽º ÆÄÀÏÀ» ¿­±âÀ§ÇÑ ±ÇÇÑÀÌ ¾øÀ» °æ¿ì ¹ß»ýÇÑ´Ù.

SQLITE_ABORT

ÄݹéÇÔ¼ö°¡ 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇßÀ» ¶§ ¹ß»ýÇÑ´Ù.

SQLITE_BUSY

´Ù¸¥ ÇÁ·Î±×·¥À̳ª ¾²·¹µå°¡ µ¥ÀÌÅͺ£À̽º¸¦ »ç¿ëÇϰí ÀÖÀ» ¶§ ¹ß»ýÇÑ´Ù. SQLite´Â ÇϳªÀÇ µ¥ÀÌÅͺ£À̽º¿¡ µ¿½Ã¿¡ µÎ°³³ª ±× ÀÌ»óÀÇ ¾²·¹µå°¡ Àд °ÍÀ» Çã¿ëÇÑ´Ù. ±×·¯³ª ¾²±âÀ§Çؼ­ ¿­¾úÀ» °æ¿ì¿¡´Â ´ÜÁö Çϳª¸¸ÀÇ ¾²·¹µå¸¸ÀÌ Á¢±ÙÀÌ °¡´ÉÇÏ´Ù.

SQLITE_NOMEM

malloc()¿¡ ½ÇÆÐÇßÀ» ¶§ ¸®ÅÏÇÑ´Ù.

SQLITE_READONLY

´ÜÁö Àб⸸ °¡´ÉÇÑ µ¥ÀÌÅͺ£À̽º(ȤÀº Àбâ Àü¿ëÀ¸·Î ¿¬) ÆÄÀÏ¿¡ ¾²·Á°í ÇßÀ» ¶§ ¹ß»ýÇÑ´Ù.

SQLITE_FULL

µð½ºÅ©¿¡ ´õÀÌ»óÀÇ °ø°£ÀÌ ¾ø°Å³ª µ¥¾îÅͺ£À̽º ÆÄÀÏÀÌ ³Ê¹«³ª Ŭ°æ¿ì ¹ß»ýÇÑ´Ù.

SQLITE_AUTH

ÀÎÁõ¿¡ ½ÇÆÐÇß´Ù.


4.6. ¿¹Á¦ ÇÁ·Î±×·¥

Áö±Ý±îÁöÀÇ ³»¿ëµéÀ» ÀÌ¿ëÇØ¼­ sqlite µ¥ÀÌÅÍ º£À̽º¿¡ ¿¬°áÇØ¼­ µ¥ÀÌÅ͸¦ °¡Á®¿À´Â °£´ÜÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î º¸µµ·Ï ÇϰڴÙ.

#include <stdio.h>
#include <sqlite.h>

static int callback(void *NU, 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)
{
    sqlite *db;
    char *ErrMsg = 0;
    int rc;

    if (argc != 3)
    {
        fprintf(stderr, "Usge : ./testsql [dbname] [query]\n");
        exit(0);
    }
    db = sqlite_open(argv[1], 0, &ErrMsg);
    if (db == 0)
    {
        fprintf(stderr, "Cant open database ; %s\n", ErrMsg);
        exit(0);
    }
    rc = sqlite_exec(db, argv[2], callback, 0, &ErrMsg);
    if (rc != SQLITE_OK)
    {
        fprintf(stderr, "SQL error : %d\n", ErrMsg);
    }
    sqlite_close(db);
    return 0;
}
            
ÇÁ·Î±×·¥ÀÇ À̸§Àº testsql·Î ÇϰڴÙ. ´ÙÀ½°ú °°ÀÌ ÄÄÆÄÀÏÈÄ Å×½ºÆ® ÇØº¸±â ¹Ù¶õ´Ù.
# gcc -o testsql testsql.c -L/usr/local/lib -lsqlite
            
´ÙÀ½Àº Å×½ºÆ® °á°ú´Ù
# ./testsql test.db "select * from test"
name = yundream
age = 19

name = hello
age = 22
# ./testsql test.db "insert into test values(\"kknd\", 56);"
# ./testsql test.db "select * from test"
name = yundream
age = 19

name = hello
age = 22

name = kknd
age = 56
            
°íÀÛ 38¶óÀÎ Á¤µµ·Î Á¦´ë·Î ÀÛµ¿ÇÏ´Â DB ¾ÖÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇß´Ù.


5. ÄݹéÇÔ¼ö¸¦ ÀÌ¿ëÇÏÁö ¾Ê´Â µ¥ÀÌÅÍ Á¢±Ù

sqlite_exec() ÇÔ¼ö´Â SQLite µ¥ÀÌÅͺ£À̽º·Î ºÎÅÍ µ¥ÀÌÅ͸¦ °¡Á®¿À±â À§ÇÑ ´ÜÁö ÇÑ °¡Áö ¹æ¹ý¸¸À» Á¦°øÇÑ´Ù. ¹æ¹ýÀÌ Á¦ÇѵǾî ÀÖÀ¸´Ï ÀÌ°Í Àú°Í ½Å°æ½ºÁö ¾Ê°í °£´ÜÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖ°ÚÀ¸³ª ¸¹Àº ÇÁ·Î±×·¡¸ÓµéÀÌ ÄݹéÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ µ¥ÀÌÅ͸¦ °¡Á®¿À´Â °Í¿¡ ¸¸Á·ÇÏÁö ¾ÊÀ» ¼öµµ ÀÖ´Ù. ÀÌ·± ÀÌÀ¯·Î SQLite 2.7.7ÀÌÈÄ ¹öÀü¿¡¼­´Â ÄݹéÇÔ¼ö°¡ ¾Æ´Ñ ´Ù¸¥ ¹æ¹ýÀ» ÅëÇØ¼­ µ¥ÀÌÅ͸¦ °¡Á®¿Ã ¼ö ÀÖµµ·Ï Áö¿øÇÔ¼ö¸¦ Ãß°¡Çß´Ù.

3°³ÀÇ »õ·Î¿î ÇÔ¼ö°¡ Ãß°¡µÇ¾ú´Âµ¥, sqlite_exec()ÀÇ ±â´ÉÀ» 3°³·Î ³ª´©¾î¼­ Á»´õ ¼¼¹ÐÇÏ°Ô Á¦¾îÇÒ ¼ö ÀÖµµ·Ï ±â´ÉÀ» ºÐÇÒ Çß´Ù°í º¸¸é µÈ´Ù.

typedef struct sqlite_vm sqlite_vm;      

int sqlite_compile
(
    sqlite *db,          /* ¿­¸° µ¥ÀÌÅÍ º£À̽º */
    const char *zSql,    /* SQL statement to be compiled */ 
    const char **pzTail, /* OUT: uncompiled tail of zSql */ 
    sqlite_vm **ppVm,    /* OUT: the virtual machine to execute zQsql */ 
    char **pzErrmsg      /* OUT: Error message */
);

int sqlite_step
(
    sqlite_vm *pVm,           /* The virtual machine to exeucte */
    int *pN,                  /* OUT: Number of columns in result */ 
    const char ***pazValue,   /* OUT: Column data */ 
    const char ***pszColName  /* OUT: Column names and datatypes */
);

int sqlite_finalize
(
    sqlite_vm *pVm,        /* The virtual machine to be finalized */
    char **pzErrMsg        /* OUT: Error message */
);