การติดตั้ง
ต้องมี SQLite library ติดตั้งบนเครื่อง (ดูรายละเอียดในบท SQLite Installation)
C/C++ Interface APIs
| ลำดับ | API & คำอธิบาย |
|---|---|
| 1 | sqlite3_open(const char *filename, sqlite3 **ppDb)เปิดการเชื่อมต่อไฟล์ฐานข้อมูล SQLite คืน connection object สำหรับ routine อื่นๆ ถ้า filename เป็น NULL หรือ ':memory:' → สร้าง in-memory database ใน RAM ถ้าไฟล์ไม่มี → สร้างไฟล์ใหม่ |
| 2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)รันคำสั่ง SQL หลายคำสั่งพร้อมกัน sqlite3 = open database object, callback เรียกต่อแถว, errmsg เก็บ error |
| 3 | sqlite3_close(sqlite3*)ปิดการเชื่อมต่อที่เปิดด้วย sqlite3_open() ต้อง finalize prepared statements ก่อน |
เชื่อมต่อฐานข้อมูล
#include <stdio.h>
#include <sqlite3.h>
int main(int argc, char* argv[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if(rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return 0;
} else {
fprintf(stderr, "Opened database successfully\n");
}
sqlite3_close(db);
return 0;
}ผลลัพธ์
$gcc test.c -l sqlite3 $./a.out Opened database successfully
สร้างตาราง
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
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[]) {
sqlite3 *db;
char *zErrMsg = 0;
int rc;
char *sql;
rc = sqlite3_open("test.db", &db);
if(rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return 0;
} else {
fprintf(stdout, "Opened database successfully\n");
}
sql = "CREATE TABLE COMPANY("
"ID INT PRIMARY KEY NOT NULL,"
"NAME TEXT NOT NULL,"
"AGE INT NOT NULL,"
"ADDRESS CHAR(50),"
"SALARY REAL );";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
if(rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Table created successfully\n");
}
sqlite3_close(db);
return 0;
}ผลลัพธ์ (ตรวจสอบไฟล์)
-rwxr-xr-x. 1 root root 9567 May 8 02:31 a.out -rw-r--r--. 1 root root 1207 May 8 02:31 test.c -rw-r--r--. 1 root root 3072 May 8 02:31 test.db
Insert ข้อมูล
/* ... ส่วนเชื่อมต่อเหมือนเดิม ... */
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
"VALUES (1, 'Paul', 32, 'California', 20000.00 ); "
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
"VALUES (3, 'Teddy', 23, 'Norway', 20000.00 ); "
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "
"VALUES (4, 'Mark', 25, 'Rich-Mond', 65000.00 );";
rc = sqlite3_exec(db, sql, callback, 0, &zErrMsg);
/* ... error handling ... */
fprintf(stdout, "Records created successfully\n");
sqlite3_close(db);ผลลัพธ์
Opened database successfully Records created successfully
SELECT ข้อมูล
Callback function ใช้รับผลลัพธ์จาก SELECT:
typedef int (*sqlite3_callback)(void*, int, char**, char**);
ถ้าใส่ callback ใน sqlite3_exec() จะถูกเรียกทุกแถวของ SELECT
ตัวอย่าง SELECT
/* ... ส่วนเชื่อมต่อ ... */
sql = "SELECT * from COMPANY";
rc = sqlite3_exec(db, sql, callback, (void*)data, &zErrMsg);
/* ... error handling ... */
fprintf(stdout, "Operation done successfully\n");
sqlite3_close(db);ผลลัพธ์
Opened database successfully Callback function called: ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 Callback function called: ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 Callback function called: ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 Callback function called: ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully