Latest web development tutorials

سكليتي - C / C ++

تثبيت

في برنامج / C ++ C وقبل استخدام برنامج SQLite، ونحن بحاجة للتأكد من أن هناك مكتبة سكليتي على الجهاز. يمكنك عرض مقطع تركيب سكليتي لعملية التثبيت.

C / C ++ واجهة API

وفيما يلي المهم C & C ++ واجهة البرنامج / برنامج SQLite لتلبية الاحتياجات الخاصة بك باستخدام قاعدة بيانات SQLite في C / C ++ البرامج. اذا كنت بحاجة الى مزيد من التفاصيل، يرجى الاطلاع على وثائق سكليتي الرسمية.

序号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 التالية كيفية الاتصال قاعدة بيانات موجودة. حالة عدم وجود قاعدة بيانات، يتم إنشاؤه، وأخيرا بإرجاع كائن قاعدة البيانات.

# تشمل <stdio.h>
# تشمل <sqlite3.h>

الباحث الرئيسي (الباحث ARGC، شار * ARGV [])
{
   sqlite3 * ديسيبل.
   شار * zErrMsg = 0؛
   الصليب الأحمر كثافة العمليات.

   الصليب الأحمر = sqlite3_open ( "test.db"، وديسيبل)؛

   إذا (الصليب الأحمر) {
      fprintf (ستدير "لا يمكن فتح قاعدة البيانات:٪ ق \ ن"، sqlite3_errmsg (ديسيبل))؛
      الخروج (0)؛
   } {شيء آخر
      fprintf (ستدير "قاعدة البيانات المفتوحة بنجاح \ ن")؛
   }
   sqlite3_close (ديسيبل)؛
}

الآن، دعونا ترجمة وتشغيل البرنامج المذكور أعلاه، إنشاءtest.db قاعدة البيانات الخاصة بنا في الدليل الحالي.يمكنك تغيير المسار حسب الحاجة.

$ دول مجلس التعاون الخليجي test.c -l sqlite3
$. / A.out
قاعدة البيانات المفتوحة بنجاح

إذا كنت ترغب في استخدام C + + رمز مصدر يمكن جمعها وفقا لالبرمجية التالية يظهر:

$ G ++ test.c -l sqlite3

هنا، مكتبة البرامج صلاتنا sqlite3 لبرنامج C لتوفير الوظائف اللازمة. وهذا خلق test.db ملف قاعدة بيانات في الدليل الخاص بك، فإنك سوف تحصل على النتائج التالية:

-rwxr-XR-س. جذر جذر 1 7383 8 مايو 02:06 a.out
-RW-ص - r-- 1 جذر جذر 323 8 مايو 02:05 test.c.
-RW-ص - r-- 1 جذر جذر 0 8 مايو 02:06 test.db.

إنشاء جدول

وسوف تستخدم ما يلي مقتطف شفرة C لإنشاء جدول في قاعدة البيانات التي تم إنشاؤها مسبقا:

# تشمل <stdio.h>
# تشمل <stdlib.h>
# تشمل <sqlite3.h> 

ثابت الباحث الاستدعاء (باطل * NotUsed، الباحث ARGC، شار ** ARGV، شار ** azColName) {
   كثافة العمليات ط.
   ل(ط = 0؛ ط العلامة & lt؛ ARGC، وأنا ++) {
      printf ( "٪ ق =٪ ق \ ن"، azColName [أنا]، ARGV [أنا] ARGV [أنا]: "فارغة")؛
   }
   printf ( "\ ن")؛
   العودة 0؛
}

الباحث الرئيسي (الباحث ARGC، شار * ARGV [])
{
   sqlite3 * ديسيبل.
   شار * zErrMsg = 0؛
   الصليب الأحمر كثافة العمليات.
   شار * SQL.

   / * قاعدة البيانات المفتوحة * /
   الصليب الأحمر = sqlite3_open ( "test.db"، وديسيبل)؛
   إذا (الصليب الأحمر) {
      fprintf (ستدير "لا يمكن فتح قاعدة البيانات:٪ ق \ ن"، sqlite3_errmsg (ديسيبل))؛
      الخروج (0)؛
   } {شيء آخر
      fprintf (المعياري، "قاعدة البيانات المفتوحة بنجاح \ ن")؛
   }

   / * إنشاء عبارة SQL * /
   SQL = "إنشاء شركة الجدول (" \
         "معرف INT المفتاح الأساسي NOT NULL،" \
         "النص اسم NOT NULL،" \
         "AGE INT NOT NULL،" \
         "شار عنوان (50)،" \
         "ريال راتب)؛"؛

   / * تنفيذ عبارة SQL * /
   الصليب الأحمر = sqlite3_exec (ديسيبل، SQL، رد، 0، وzErrMsg)؛
   إذا (الصليب الأحمر! = SQLITE_OK) {
   fprintf (ستدير "خطأ SQL:٪ ق \ ن"، zErrMsg)؛
      sqlite3_free (zErrMsg)؛
   } {شيء آخر
      fprintf (المعياري، "الجدول بنجاح إنشاء \ ن")؛
   }
   sqlite3_close (ديسيبل)؛
   العودة 0؛
}

عند ترجمة البرنامج المذكور أعلاه وتنفيذ، فإنه يخلق الجدول شركة في test.db ملف، القائمة النهائية للملفات على النحو التالي:

-rwxr-XR-س. جذر جذر 1 9567 8 مايو 02:31 a.out
-RW-ص - r-- 1 جذر جذر 8 مايو 1207 02:31 test.c.
-RW-ص - r-- 1 جذر جذر 8 مايو 3072 02:31 test.db.

عملية INSERT

يظهر مقتطف شفرة C التالية كيفية إنشاء السجلات في الجدول شركة تم إنشاؤها أعلاه:

# تشمل <stdio.h>
# تشمل <stdlib.h>
# تشمل <sqlite3.h>

ثابت الباحث الاستدعاء (باطل * NotUsed، الباحث ARGC، شار ** ARGV، شار ** azColName) {
   كثافة العمليات ط.
   ل(ط = 0؛ ط العلامة & lt؛ ARGC، وأنا ++) {
      printf ( "٪ ق =٪ ق \ ن"، azColName [أنا]، ARGV [أنا] ARGV [أنا]: "فارغة")؛
   }
   printf ( "\ ن")؛
   العودة 0؛
}

الباحث الرئيسي (الباحث ARGC، شار * ARGV [])
{
   sqlite3 * ديسيبل.
   شار * zErrMsg = 0؛
   الصليب الأحمر كثافة العمليات.
   شار * SQL.

   / * قاعدة البيانات المفتوحة * /
   الصليب الأحمر = sqlite3_open ( "test.db"، وديسيبل)؛
   إذا (الصليب الأحمر) {
      fprintf (ستدير "لا يمكن فتح قاعدة البيانات:٪ ق \ ن"، sqlite3_errmsg (ديسيبل))؛
      الخروج (0)؛
   } {شيء آخر
      fprintf (ستدير "قاعدة البيانات المفتوحة بنجاح \ ن")؛
   }

   / * إنشاء عبارة SQL * /
   SQL = "INSERT INTO شركة (ID، الاسم والعمر والعنوان، الراتب)" \
         "VALUES (1، 'بول'، 32، 'كاليفورنيا'، 20000.00)؛" \
         "INSERT INTO شركة (ID، الاسم والعمر والعنوان، الراتب)" \
         "VALUES (2،" ألين "، 25،" تكساس "، 15000.00)؛" \
         "INSERT INTO شركة (ID، الاسم والعمر والعنوان، الراتب)" \
         "VALUES (3، 'تيدي'، 23، 'النرويج'، 20000.00)؛" \
         "INSERT INTO شركة (ID، الاسم والعمر والعنوان، الراتب)" \
         "VALUES (4،" مارك (25 عاما) "ريتش موند"، 65000.00)؛ "؛

   / * تنفيذ عبارة SQL * /
   الصليب الأحمر = sqlite3_exec (ديسيبل، SQL، رد، 0، وzErrMsg)؛
   إذا (الصليب الأحمر! = SQLITE_OK) {
      fprintf (ستدير "خطأ SQL:٪ ق \ ن"، zErrMsg)؛
      sqlite3_free (zErrMsg)؛
   } {شيء آخر
      fprintf (المعياري، "السجلات التي تم إنشاؤها بنجاح \ ن")؛
   }
   sqlite3_close (ديسيبل)؛
   العودة 0؛
}

عند ترجمة البرنامج المذكور أعلاه وتنفيذه، فإنه سيتم إنشاء في الجدول شركة لسجل معين، ويعرض السطرين التاليين:

قاعدة البيانات المفتوحة بنجاح
السجلات التي تم إنشاؤها بنجاح

عمليات SELECT

قبل أن نبدأ شرح أمثلة موثقة، دعونا أولا نفهم بعض التفاصيل وظيفة الإستدعاء، والتي سوف يكون لدينا مثال للاستخدام. يوفر هذا الاستدعاء النتائج المتحصل عليها من طريقة عبارة SELECT. أعلن ذلك على النحو التالي:

الباحث typedef و(* sqlite3_callback) (
باطلة *، / * البيانات الواردة في حجة 4th من sqlite3_exec () * /
كثافة العمليات، / * عدد الأعمدة في الصف * /
شار **، / * هناك مجموعة من السلاسل التي تمثل الحقول في الصف * /
شار ** / * هناك مجموعة من السلاسل التي تمثل أسماء الأعمدة * /
)؛

إذا كان الاستدعاء أعلاه كمعلمة الثالث في sqlite_exec الداخلي ()، ثم سكليتي SQL لكل سجل ضمن حدود كل عملية تنفيذ بيان SELECT باستدعاء الدالة الاستدعاء.

يظهر مقتطف شفرة C التالية كيفية الحصول عليها من الجدول الشركة التي تم إنشاؤها في وقت سابق ويعرض سجل:

# تشمل <stdio.h>
# تشمل <stdlib.h>
# تشمل <sqlite3.h>

رد الباحث ثابت (البيانات * باطلة، الباحث ARGC، شار ** ARGV، شار ** azColName) {
   كثافة العمليات ط.
   fprintf (ستدير "٪ الصورة:" (CONST تشار *) بيانات)؛
   ل(ط = 0؛ ط العلامة & lt؛ ARGC، وأنا ++) {
      printf ( "٪ ق =٪ ق \ ن"، azColName [أنا]، ARGV [أنا] ARGV [أنا]: "فارغة")؛
   }
   printf ( "\ ن")؛
   العودة 0؛
}

الباحث الرئيسي (الباحث ARGC، شار * ARGV [])
{
   sqlite3 * ديسيبل.
   شار * zErrMsg = 0؛
   الصليب الأحمر كثافة العمليات.
   شار * SQL.
   CONST شار * بيانات = "استدعاء وظيفة تسمى".

   / * قاعدة البيانات المفتوحة * /
   الصليب الأحمر = sqlite3_open ( "test.db"، وديسيبل)؛
   إذا (الصليب الأحمر) {
      fprintf (ستدير "لا يمكن فتح قاعدة البيانات:٪ ق \ ن"، sqlite3_errmsg (ديسيبل))؛
      الخروج (0)؛
   } {شيء آخر
      fprintf (ستدير "قاعدة البيانات المفتوحة بنجاح \ ن")؛
   }

   / * إنشاء عبارة SQL * /
   SQL = "SELECT * من شركة".

   / * تنفيذ عبارة SQL * /
   الصليب الأحمر = sqlite3_exec (ديسيبل، SQL، رد، (الفراغ *) البيانات، وzErrMsg)؛
   إذا (الصليب الأحمر! = SQLITE_OK) {
      fprintf (ستدير "خطأ SQL:٪ ق \ ن"، zErrMsg)؛
      sqlite3_free (zErrMsg)؛
   } {شيء آخر
      fprintf (المعياري، "عملية فعلت بنجاح \ ن")؛
   }
   sqlite3_close (ديسيبل)؛
   العودة 0؛
}

عند ترجمة البرنامج أعلاه وتنفيذها، وتنتج النتيجة التالية:

قاعدة البيانات المفتوحة بنجاح
وظيفة رد الاتصال يسمى: ID = 1
NAME = بول
AGE = 32
عنوان = كاليفورنيا
راتب = 20000.0

وظيفة رد الاتصال يسمى: ID = 2
NAME = ألين
AGE = 25
عنوان = تكساس
راتب = 15000.0

وظيفة رد الاتصال يسمى: ID = 3
NAME = تيدي
AGE = 23
عنوان = النرويج
راتب = 20000.0

وظيفة رد الاتصال يسمى: ID = 4
NAME = كافة
AGE = 25
عنوان = ريتش موند
راتب = 65000.0

العملية تمت العملية بنجاح

عملية تحديث

يظهر مقتطف شفرة C التالية كيفية استخدام عبارة UPDATE لتحديث أي سجلات، ثم الحصول من الجدول الشركة وعرض سجل تحديث:

# تشمل <stdio.h>
# تشمل <stdlib.h>
# تشمل <sqlite3.h> 

رد الباحث ثابت (البيانات * باطلة، الباحث ARGC، شار ** ARGV، شار ** azColName) {
   كثافة العمليات ط.
   fprintf (ستدير "٪ الصورة:" (CONST تشار *) بيانات)؛
   ل(ط = 0؛ ط العلامة & lt؛ ARGC، وأنا ++) {
      printf ( "٪ ق =٪ ق \ ن"، azColName [أنا]، ARGV [أنا] ARGV [أنا]: "فارغة")؛
   }
   printf ( "\ ن")؛
   العودة 0؛
}

الباحث الرئيسي (الباحث ARGC، شار * ARGV [])
{
   sqlite3 * ديسيبل.
   شار * zErrMsg = 0؛
   الصليب الأحمر كثافة العمليات.
   شار * SQL.
   CONST شار * بيانات = "استدعاء وظيفة تسمى".

   / * قاعدة البيانات المفتوحة * /
   الصليب الأحمر = sqlite3_open ( "test.db"، وديسيبل)؛
   إذا (الصليب الأحمر) {
      fprintf (ستدير "لا يمكن فتح قاعدة البيانات:٪ ق \ ن"، sqlite3_errmsg (ديسيبل))؛
      الخروج (0)؛
   } {شيء آخر
      fprintf (ستدير "قاعدة البيانات المفتوحة بنجاح \ ن")؛
   }

   / * إنشاء عبارة SQL المدمجة * /
   SQL = "مجموعة شركة استكمال راتب = 25000.00 حيث ID = 1؛" \
         "SELECT * من شركة".

   / * تنفيذ عبارة SQL * /
   الصليب الأحمر = sqlite3_exec (ديسيبل، SQL، رد، (الفراغ *) البيانات، وzErrMsg)؛
   إذا (الصليب الأحمر! = SQLITE_OK) {
      fprintf (ستدير "خطأ SQL:٪ ق \ ن"، zErrMsg)؛
      sqlite3_free (zErrMsg)؛
   } {شيء آخر
      fprintf (المعياري، "عملية فعلت بنجاح \ ن")؛
   }
   sqlite3_close (ديسيبل)؛
   العودة 0؛
}

عند ترجمة البرنامج أعلاه وتنفيذها، وتنتج النتيجة التالية:

قاعدة البيانات المفتوحة بنجاح
وظيفة رد الاتصال يسمى: ID = 1
NAME = بول
AGE = 32
عنوان = كاليفورنيا
راتب = 25000.0

وظيفة رد الاتصال يسمى: ID = 2
NAME = ألين
AGE = 25
عنوان = تكساس
راتب = 15000.0

وظيفة رد الاتصال يسمى: ID = 3
NAME = تيدي
AGE = 23
عنوان = النرويج
راتب = 20000.0

وظيفة رد الاتصال يسمى: ID = 4
NAME = كافة
AGE = 25
عنوان = ريتش موند
راتب = 65000.0

العملية تمت العملية بنجاح

عملية الحذف

يظهر مقتطف شفرة C التالية كيفية استخدام عبارة DELETE حذف أي سجلات، ثم تؤخذ من الجدول الشركة ويعرض تسجيل المتبقية:

# تشمل <stdio.h>
# تشمل <stdlib.h>
# تشمل <sqlite3.h> 

رد الباحث ثابت (البيانات * باطلة، الباحث ARGC، شار ** ARGV، شار ** azColName) {
   كثافة العمليات ط.
   fprintf (ستدير "٪ الصورة:" (CONST تشار *) بيانات)؛
   ل(ط = 0؛ ط <ARGC، وأنا ++) {
      printf ( "٪ ق =٪ ق \ ن"، azColName [أنا]، ARGV [أنا] ARGV [أنا]: "فارغة")؛
   }
   printf ( "\ ن")؛
   العودة 0؛
}

الباحث الرئيسي (الباحث ARGC، شار * ARGV [])
{
   sqlite3 * ديسيبل.
   شار * zErrMsg = 0؛
   الصليب الأحمر كثافة العمليات.
   شار * SQL.
   CONST شار * بيانات = "استدعاء وظيفة تسمى".

   / * قاعدة البيانات المفتوحة * /
   الصليب الأحمر = sqlite3_open ( "test.db"، وديسيبل)؛
   إذا (الصليب الأحمر) {
      fprintf (ستدير "لا يمكن فتح قاعدة البيانات:٪ ق \ ن"، sqlite3_errmsg (ديسيبل))؛
      الخروج (0)؛
   } {شيء آخر
      fprintf (ستدير "قاعدة البيانات المفتوحة بنجاح \ ن")؛
   }

   / * إنشاء عبارة SQL المدمجة * /
   SQL = "حذف من شركة حيث ID = 2"؛ \
         "SELECT * من شركة".

   / * تنفيذ عبارة SQL * /
   الصليب الأحمر = sqlite3_exec (ديسيبل، SQL، رد، (الفراغ *) البيانات، وzErrMsg)؛
   إذا (الصليب الأحمر! = SQLITE_OK) {
      fprintf (ستدير "خطأ SQL:٪ ق \ ن"، zErrMsg)؛
      sqlite3_free (zErrMsg)؛
   } {شيء آخر
      fprintf (المعياري، "عملية فعلت بنجاح \ ن")؛
   }
   sqlite3_close (ديسيبل)؛
   العودة 0؛
}

عند ترجمة البرنامج أعلاه وتنفيذها، وتنتج النتيجة التالية:

قاعدة البيانات المفتوحة بنجاح
وظيفة رد الاتصال يسمى: ID = 1
NAME = بول
AGE = 32
عنوان = كاليفورنيا
راتب = 20000.0

وظيفة رد الاتصال يسمى: ID = 3
NAME = تيدي
AGE = 23
عنوان = النرويج
راتب = 20000.0

وظيفة رد الاتصال يسمى: ID = 4
NAME = كافة
AGE = 25
عنوان = ريتش موند
راتب = 65000.0

العملية تمت العملية بنجاح