Latest web development tutorials

SQLite - C / C ++

ติดตั้ง

ในโปรแกรม C / C ++ ก่อนที่จะใช้ SQLite เราต้องให้แน่ใจว่ามีห้องสมุด SQLite บนเครื่อง คุณสามารถดูข้อมูล SQLite ส่วนการติดตั้งสำหรับการติดตั้ง

C / C ++ อินเตอร์เฟซ API

ต่อไปนี้เป็นสิ่งที่สำคัญโปรแกรม C & C ++ / อินเตอร์เฟซ SQLite เพื่อตอบสนองความต้องการของคุณโดยใช้ฐานข้อมูล SQLite ใน C / C ++ โปรแกรม หากคุณต้องการรายละเอียดเพิ่มเติมโปรดดูเอกสารข้อมูล SQLite อย่างเป็นทางการ

序号API & 描述
1sqlite3_open(const char *filename, sqlite3 **ppDb)

该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。

如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。

如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。

2sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。

在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。

sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。

3sqlite3_close(sqlite3*)

该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。

如果还有查询没有完成,sqlite3_close() 将返回 SQLITE_BUSY 禁止关闭的错误消息。

เชื่อมต่อกับฐานข้อมูล

ต่อไปนี้ข้อมูลโค้ด C แสดงวิธีการเชื่อมต่อกับฐานข้อมูลที่มีอยู่ ถ้าฐานข้อมูลไม่ได้อยู่ก็จะถูกสร้างขึ้นและในที่สุดก็จะส่งกลับวัตถุฐานข้อมูล

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

int main (int argc, char * argv [])
{
   sqlite3 * DB;
   char * zErrMsg = 0;
   RC int;

   RC = sqlite3_open ( "test.db" และ DB);

   ถ้า (RC) {
      fprintf (stderr "ไม่สามารถเปิดฐานข้อมูล:% s \ n", sqlite3_errmsg (DB));
      ออก (0);
   } else {
      fprintf (stderr "ฐานข้อมูลเปิดประสบความสำเร็จ \ n");
   }
   sqlite3_close (DB);
}

ตอนนี้ขอรวบรวมและเรียกใช้โปรแกรมดังกล่าวข้างต้นในการสร้างฐานข้อมูลของเราtest.db ในไดเรกทอรีปัจจุบันคุณสามารถเปลี่ยนเส้นทางตามความจำเป็น

$ Gcc test.c -l sqlite3
$. / a.out
ฐานข้อมูลเปิดประสบความสำเร็จ

หากคุณต้องการที่จะใช้ภาษา C ++ รหัสที่มาสามารถรวบรวมตามด้วยรหัสต่อไปแสดงให้เห็นว่า:

$ G ++ test.c -l sqlite3

นี่ห้องสมุดการเชื่อมโยงโปรแกรมของเรา sqlite3 สำหรับโปรแกรม C เพื่อให้ฟังก์ชั่นที่จำเป็น นี้จะสร้าง test.db ไฟล์ฐานข้อมูลในไดเรกทอรีของคุณคุณจะได้รับผลดังต่อไปนี้:

-rwxr-XR-X. ราก 1 ราก 8 พฤษภาคม 7383 02:06 a.out
-RW-R - r-- 1 ราก 323 8 พฤษภาคม 02:05 test.c.
-RW-R - r-- 1 ราก 0 8 พฤษภาคม 02:06 test.db.

สร้างตาราง

ข้อมูลโค้ด C ต่อไปนี้จะถูกนำมาใช้เพื่อสร้างตารางในฐานข้อมูลที่สร้างขึ้นก่อนหน้านี้:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

int โทรกลับคงที่ (โมฆะ * NotUsed, int argc, ถ่าน ** argv ถ่าน ** azColName) {
   int i;
   สำหรับ (i = 0; I & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [I], argv [I] argv [I]: "โมฆะ");
   }
   printf ( "\ n");
   กลับ 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * DB;
   char * zErrMsg = 0;
   RC int;
   char * SQL;

   / * เปิดฐานข้อมูล * /
   RC = sqlite3_open ( "test.db" และ DB);
   ถ้า (RC) {
      fprintf (stderr "ไม่สามารถเปิดฐานข้อมูล:% s \ n", sqlite3_errmsg (DB));
      ออก (0);
   } else {
      fprintf (stdout "ฐานข้อมูลเปิดประสบความสำเร็จ \ n");
   }

   / * สร้างคำสั่ง SQL * /
   SQL = "CREATE TABLE บริษัท (" \
         "รหัส INT คีย์หลักไม่เป็นโมฆะ," \
         "ข้อความชื่อไม่เป็นโมฆะ," \
         "ยุค INT NOT NULL," \
         "ที่อยู่ CHAR (50)," \
         "เงินเดือนจริง);";

   / * รันคำสั่ง SQL * /
   RC = sqlite3_exec (DB, SQL, โทรกลับ, 0, และ zErrMsg);
   ถ้า (RC! = SQLITE_OK) {
   fprintf (stderr "ข้อผิดพลาด SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } else {
      fprintf (stdout "ตารางที่สร้างเสร็จเรียบร้อยแล้ว \ n");
   }
   sqlite3_close (DB);
   กลับ 0;
}

เมื่อโปรแกรมดังกล่าวข้างต้นจะรวบรวมและดำเนินการจะสร้างตาราง บริษัท ในแฟ้ม test.db รายการสุดท้ายของไฟล์ดังต่อไปนี้:

-rwxr-XR-X. ราก 1 ราก 8 พฤษภาคม 9567 02:31 a.out
-RW-R - r-- 1 ราก 8 พฤษภาคม 1207 02:31 test.c.
-RW-R - r-- 1 ราก 8 พฤษภาคม 3072 02:31 test.db.

ดำเนินการแทรก

ต่อไปนี้ข้อมูลโค้ด C แสดงให้เห็นว่าการสร้างระเบียนในตาราง บริษัท สร้างขึ้น:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

int โทรกลับคงที่ (โมฆะ * NotUsed, int argc, ถ่าน ** argv ถ่าน ** azColName) {
   int i;
   สำหรับ (i = 0; I & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [I], argv [I] argv [I]: "โมฆะ");
   }
   printf ( "\ n");
   กลับ 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * DB;
   char * zErrMsg = 0;
   RC int;
   char * SQL;

   / * เปิดฐานข้อมูล * /
   RC = sqlite3_open ( "test.db" และ DB);
   ถ้า (RC) {
      fprintf (stderr "ไม่สามารถเปิดฐานข้อมูล:% s \ n", sqlite3_errmsg (DB));
      ออก (0);
   } else {
      fprintf (stderr "ฐานข้อมูลเปิดประสบความสำเร็จ \ n");
   }

   / * สร้างคำสั่ง SQL * /
   SQL = "INSERT INTO บริษัท (ID ชื่ออายุที่อยู่ Salary)" \
         "ค่านิยม (1, 'พอล', 32, 'แคลิฟอร์เนีย' 20,000.00);" \
         "INSERT INTO บริษัท (ID ชื่ออายุที่อยู่ Salary)" \
         "ค่านิยม (2, 'อัลเลน', 25, เท็กซัส '15,000.00);" \
         "INSERT INTO บริษัท (ID ชื่ออายุที่อยู่ Salary)" \
         "ค่านิยม (3, 'เท็ดดี้', 23, 'นอร์เวย์' 20,000.00);" \
         "INSERT INTO บริษัท (ID ชื่ออายุที่อยู่ Salary)" \
         "ค่านิยม (4, 'มาร์ค', 25, 'รวย-Mond' 65,000.00);";

   / * รันคำสั่ง SQL * /
   RC = sqlite3_exec (DB, SQL, โทรกลับ, 0, และ zErrMsg);
   ถ้า (RC! = SQLITE_OK) {
      fprintf (stderr "ข้อผิดพลาด SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } else {
      fprintf (stdout "ประวัติสร้างเสร็จเรียบร้อยแล้ว \ n");
   }
   sqlite3_close (DB);
   กลับ 0;
}

เมื่อโปรแกรมดังกล่าวข้างต้นจะรวบรวมและดำเนินการก็จะสร้างในตารางของ บริษัท สำหรับการบันทึกรับและแสดงสองบรรทัดต่อไป:

ฐานข้อมูลเปิดประสบความสำเร็จ
ประวัติสร้างเสร็จเรียบร้อยแล้ว

การดำเนินการเลือก

ก่อนที่เราจะเริ่มต้นอธิบายเอกสารตัวอย่างให้เราแรกเข้าใจรายละเอียดบางส่วนของฟังก์ชั่นการโทรกลับซึ่งจะเป็นตัวอย่างของเราที่จะใช้ นี้ติดต่อกลับให้ผลที่ได้จากวิธีการสั่ง SELECT มันมีการประกาศดังต่อไปนี้:

typedef int (* sqlite3_callback) (
เป็นโมฆะ * / * ข้อมูลที่ระบุไว้ในข้อโต้แย้งที่ 4 ของ sqlite3_exec () * /
int / * จำนวนคอลัมน์ในแถว * /
ถ่าน ** / * อาร์เรย์ของสตริงที่เป็นตัวแทนของเขตข้อมูลในแถว * /
ถ่าน ** / * อาร์เรย์ของสตริงที่เป็นตัวแทนของชื่อคอลัมน์ * /
);

หากโทรกลับข้างต้นเป็นพารามิเตอร์ที่สามใน sqlite_exec () ขั้นตอนแล้ว SQLite SQL สำหรับแต่ละระเบียนภายในพารามิเตอร์ของแต่ละกระบวนการดำเนินการคำสั่ง SELECT เรียกฟังก์ชันการเรียกกลับ

ต่อไปนี้ข้อมูลโค้ด C แสดงให้เห็นถึงวิธีการที่จะได้รับจากตาราง บริษัท ที่สร้างขึ้นก่อนหน้านี้และแสดงบันทึก:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

int คงโทรกลับ (ข้อมูลโมฆะ * int argc, ถ่าน ** argv ถ่าน ** azColName) {
   int i;
   fprintf (stderr, "% s" (ถ่าน const *) ข้อมูล);
   สำหรับ (i = 0; I & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [I], argv [I] argv [I]: "โมฆะ");
   }
   printf ( "\ n");
   กลับ 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * DB;
   char * zErrMsg = 0;
   RC int;
   char * SQL;
   ถ่าน const * ข้อมูล = "ฟังก์ชั่นการโทรกลับเรียกว่า";

   / * เปิดฐานข้อมูล * /
   RC = sqlite3_open ( "test.db" และ DB);
   ถ้า (RC) {
      fprintf (stderr "ไม่สามารถเปิดฐานข้อมูล:% s \ n", sqlite3_errmsg (DB));
      ออก (0);
   } else {
      fprintf (stderr "ฐานข้อมูลเปิดประสบความสำเร็จ \ n");
   }

   / * สร้างคำสั่ง SQL * /
   SQL = "SELECT * จาก บริษัท ";

   / * รันคำสั่ง SQL * /
   RC = sqlite3_exec (DB, SQL, โทรกลับ (void *) ข้อมูลและ zErrMsg);
   ถ้า (RC! = SQLITE_OK) {
      fprintf (stderr "ข้อผิดพลาด SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } else {
      fprintf (stdout, "การดำเนินการทำสำเร็จ \ n");
   }
   sqlite3_close (DB);
   กลับ 0;
}

เมื่อโปรแกรมดังกล่าวข้างต้นจะรวบรวมและดำเนินการจะผลิตผลต่อไปนี้:

ฐานข้อมูลเปิดประสบความสำเร็จ
ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 1
NAME = พอล
อายุ = 32
ADDRESS = แคลิฟอร์เนีย
เงินเดือน = 20,000.0

ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 2
NAME = อัลเลน
อายุ = 25
ADDRESS = เท็กซัส
เงินเดือน = 15,000.0

ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 3
NAME = เท็ดดี้
อายุ = 23
ADDRESS = นอร์เวย์
เงินเดือน = 20,000.0

ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 4
NAME = มาร์ค
อายุ = 25
ADDRESS = รวย-Mond
เงินเดือน = 65,000.0

การดำเนินงานที่ทำสำเร็จ

การดำเนินการปรับปรุง

ต่อไปนี้ข้อมูลโค้ด C แสดงวิธีการใช้คำสั่ง UPDATE ปรับปรุงระเบียนใด ๆ แล้วจะได้รับจากตาราง บริษัท และแสดงบันทึกการปรับปรุง:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

int คงโทรกลับ (ข้อมูลโมฆะ * int argc, ถ่าน ** argv ถ่าน ** azColName) {
   int i;
   fprintf (stderr, "% s" (ถ่าน const *) ข้อมูล);
   สำหรับ (i = 0; I & lt; argc; i ++) {
      printf ( "% s =% s \ n", azColName [I], argv [I] argv [I]: "โมฆะ");
   }
   printf ( "\ n");
   กลับ 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * DB;
   char * zErrMsg = 0;
   RC int;
   char * SQL;
   ถ่าน const * ข้อมูล = "ฟังก์ชั่นการโทรกลับเรียกว่า";

   / * เปิดฐานข้อมูล * /
   RC = sqlite3_open ( "test.db" และ DB);
   ถ้า (RC) {
      fprintf (stderr "ไม่สามารถเปิดฐานข้อมูล:% s \ n", sqlite3_errmsg (DB));
      ออก (0);
   } else {
      fprintf (stderr "ฐานข้อมูลเปิดประสบความสำเร็จ \ n");
   }

   / * สร้างคำสั่ง SQL ที่ผสาน * /
   SQL = "UPDATE บริษัท ได้กำหนดเงินเดือน = 25,000.00 ที่ id = 1;" \
         "* เลือกจาก บริษัท ";

   / * รันคำสั่ง SQL * /
   RC = sqlite3_exec (DB, SQL, โทรกลับ (void *) ข้อมูลและ zErrMsg);
   ถ้า (RC! = SQLITE_OK) {
      fprintf (stderr "ข้อผิดพลาด SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } else {
      fprintf (stdout, "การดำเนินการทำสำเร็จ \ n");
   }
   sqlite3_close (DB);
   กลับ 0;
}

เมื่อโปรแกรมดังกล่าวข้างต้นจะรวบรวมและดำเนินการจะผลิตผลต่อไปนี้:

ฐานข้อมูลเปิดประสบความสำเร็จ
ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 1
NAME = พอล
อายุ = 32
ADDRESS = แคลิฟอร์เนีย
เงินเดือน = 25,000.0

ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 2
NAME = อัลเลน
อายุ = 25
ADDRESS = เท็กซัส
เงินเดือน = 15,000.0

ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 3
NAME = เท็ดดี้
อายุ = 23
ADDRESS = นอร์เวย์
เงินเดือน = 20,000.0

ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 4
NAME = มาร์ค
อายุ = 25
ADDRESS = รวย-Mond
เงินเดือน = 65,000.0

การดำเนินงานที่ทำสำเร็จ

ดำเนินการลบ

ต่อไปนี้ข้อมูลโค้ด C แสดงวิธีการใช้คำสั่ง DELETE ลบระเบียนใด ๆ และจากนั้นนำมาจากตาราง บริษัท และแสดงการบันทึกที่เหลือ:

#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> 

int คงโทรกลับ (ข้อมูลโมฆะ * int argc, ถ่าน ** argv ถ่าน ** azColName) {
   int i;
   fprintf (stderr, "% s" (ถ่าน const *) ข้อมูล);
   สำหรับ (i = 0; I <argc; i ++) {
      printf ( "% s =% s \ n", azColName [I], argv [I] argv [I]: "โมฆะ");
   }
   printf ( "\ n");
   กลับ 0;
}

int main (int argc, char * argv [])
{
   sqlite3 * DB;
   char * zErrMsg = 0;
   RC int;
   char * SQL;
   ถ่าน const * ข้อมูล = "ฟังก์ชั่นการโทรกลับเรียกว่า";

   / * เปิดฐานข้อมูล * /
   RC = sqlite3_open ( "test.db" และ DB);
   ถ้า (RC) {
      fprintf (stderr "ไม่สามารถเปิดฐานข้อมูล:% s \ n", sqlite3_errmsg (DB));
      ออก (0);
   } else {
      fprintf (stderr "ฐานข้อมูลเปิดประสบความสำเร็จ \ n");
   }

   / * สร้างคำสั่ง SQL ที่ผสาน * /
   SQL = "ลบออกจาก บริษัท ที่ id = 2;" \
         "* เลือกจาก บริษัท ";

   / * รันคำสั่ง SQL * /
   RC = sqlite3_exec (DB, SQL, โทรกลับ (void *) ข้อมูลและ zErrMsg);
   ถ้า (RC! = SQLITE_OK) {
      fprintf (stderr "ข้อผิดพลาด SQL:% s \ n", zErrMsg);
      sqlite3_free (zErrMsg);
   } else {
      fprintf (stdout, "การดำเนินการทำสำเร็จ \ n");
   }
   sqlite3_close (DB);
   กลับ 0;
}

เมื่อโปรแกรมดังกล่าวข้างต้นจะรวบรวมและดำเนินการจะผลิตผลต่อไปนี้:

ฐานข้อมูลเปิดประสบความสำเร็จ
ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 1
NAME = พอล
อายุ = 32
ADDRESS = แคลิฟอร์เนีย
เงินเดือน = 20,000.0

ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 3
NAME = เท็ดดี้
อายุ = 23
ADDRESS = นอร์เวย์
เงินเดือน = 20,000.0

ฟังก์ชั่นการโทรกลับเรียกว่า: ID = 4
NAME = มาร์ค
อายุ = 25
ADDRESS = รวย-Mond
เงินเดือน = 65,000.0

การดำเนินงานที่ทำสำเร็จ