SQLite - C / C ++
ติดตั้ง
ในโปรแกรม C / C ++ ก่อนที่จะใช้ SQLite เราต้องให้แน่ใจว่ามีห้องสมุด SQLite บนเครื่อง คุณสามารถดูข้อมูล SQLite ส่วนการติดตั้งสำหรับการติดตั้ง
C / C ++ อินเตอร์เฟซ API
ต่อไปนี้เป็นสิ่งที่สำคัญโปรแกรม C & C ++ / อินเตอร์เฟซ SQLite เพื่อตอบสนองความต้องการของคุณโดยใช้ฐานข้อมูล SQLite ใน C / C ++ โปรแกรม หากคุณต้องการรายละเอียดเพิ่มเติมโปรดดูเอกสารข้อมูล SQLite อย่างเป็นทางการ
序号 | API & 描述 |
---|---|
1 | sqlite3_open(const char *filename, sqlite3 **ppDb) 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。 如果filename参数是 NULL 或 ':memory:',那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。 如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。 |
2 | sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) 该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。 在这里,第一个参数sqlite3是打开的数据库对象,sqlite_callback是一个回调,data作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。 sqlite3_exec() 程序解析并执行由sql参数所给的每个命令,直到字符串结束或者遇到错误为止。 |
3 | sqlite3_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 การดำเนินงานที่ทำสำเร็จ