新聞中心
SQLite是一款輕量級的嵌入式關(guān)系型數(shù)據(jù)庫,適用于嵌入式設(shè)備和移動設(shè)備等資源有限的系統(tǒng)。它不需要獨立的服務(wù)進(jìn)程,可以直接訪問存儲在普通的磁盤文件中的數(shù)據(jù),因此相對于其他數(shù)據(jù)庫來說,SQLite占用的系統(tǒng)資源更少,性能更高。

在C語言中,我們可以通過SQLite API來連接SQLite數(shù)據(jù)庫。這篇文章將詳細(xì)介紹如何使用C語言中的SQLite API來連接SQLite數(shù)據(jù)庫。主要包括以下幾個方面:
1.連接SQLite數(shù)據(jù)庫
2.插入數(shù)據(jù)
3.查詢數(shù)據(jù)
4.更新數(shù)據(jù)
5.刪除數(shù)據(jù)
1.連接SQLite數(shù)據(jù)庫
在C語言中,我們可以使用sqlite3_open函數(shù)來創(chuàng)建一個與SQLite數(shù)據(jù)庫的連接。該函數(shù)的原型如下:
“`
int sqlite3_open(const char *filename, sqlite3 **ppDb);
“`
該函數(shù)接收兩個參數(shù),之一個參數(shù)為要打開的SQLite數(shù)據(jù)庫的文件名,包括路徑,如果該文件不存在則會自動創(chuàng)建。第二個參數(shù)為用來存儲SQLite數(shù)據(jù)庫對象的指針。
連接SQLite數(shù)據(jù)庫的示例代碼如下:
“`c
#include
#include
int mn(int argc, char **argv)
{
sqlite3 *db;
int rc = sqlite3_open(“test.db”, &db);
if (rc)
{
fprintf(stderr, “Can’t open database: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
else
{
printf(“Opened database successfully!\n”);
}
sqlite3_close(db);
return 0;
}
“`
在上述示例代碼中,我們首先包含了sqlite3.h頭文件,然后使用sqlite3_open函數(shù)連接了一個名為“test.db”的SQLite數(shù)據(jù)庫。如果連接失敗,我們將輸出錯誤消息并返回錯誤代碼。如果連接成功,我們將輸出一條成功連接的消息。我們通過sqlite3_close函數(shù)關(guān)閉了與數(shù)據(jù)庫的連接。
2.插入數(shù)據(jù)
要向SQLite數(shù)據(jù)庫中插入數(shù)據(jù),我們可以使用sqlite3_exec函數(shù)。這個函數(shù)可以執(zhí)行在之一個參數(shù)中指定的任何SQL語句。該函數(shù)的原型如下:
“`c
int sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg);
“`
該函數(shù)接受五個參數(shù),之一個參數(shù)為與SQLite數(shù)據(jù)庫之間的連接。第二個參數(shù)為要執(zhí)行的SQL語句。第三個參數(shù)為結(jié)果回調(diào)函數(shù),可以在SQL執(zhí)行期間或執(zhí)行完成后進(jìn)行一些操作。第四個參數(shù)為以上結(jié)果回調(diào)函數(shù)的之一個參數(shù)。第五個參數(shù)用于存儲錯誤消息。
插入數(shù)據(jù)的示例代碼如下:
“`c
#include
#include
int mn(int argc, char **argv)
{
sqlite3 *db;
int rc;
rc = sqlite3_open(“test.db”, &db);
if (rc)
{
fprintf(stderr, “Can’t open database: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
else
{
printf(“Opened database successfully!\n”);
}
char *sql = “INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) ” \
“VALUES (1, ‘Paul’, 32, ‘California’, 20230.00); “;
char *errmsg;
rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
if (rc != SQLITE_OK)
{
fprintf(stderr, “SQL error: %s\n”, errmsg);
sqlite3_free(errmsg);
}
else
{
printf(“Records created successfully!\n”);
}
sqlite3_close(db);
return 0;
}
“`
在上述示例代碼中,我們通過sql變量設(shè)置了要執(zhí)行的SQL語句,即向名為“COMPANY”的表中插入一條記錄。然后我們將該SQL語句傳遞給sqlite3_exec函數(shù)來執(zhí)行。如果執(zhí)行期間發(fā)生錯誤,我們將通過sqlite3_free函數(shù)釋放錯誤消息,并輸出錯誤消息。否則,我們將輸出一條成功插入的消息。
3.查詢數(shù)據(jù)
要查詢SQLite數(shù)據(jù)庫中的數(shù)據(jù),我們可以使用sqlite3_exec函數(shù)和結(jié)果回調(diào)函數(shù)。當(dāng)sqlite3_exec執(zhí)行SQL查詢后,結(jié)果回調(diào)函數(shù)將被調(diào)用一次或多次。每次調(diào)用將返回一個結(jié)果行。每個結(jié)果行是由一個或多個數(shù)據(jù)值組成的數(shù)組。
結(jié)果回調(diào)函數(shù)的原型如下:
“`c
int callback(void *NotUsed, int argc, char **argv, char **azColName);
“`
除了之一個參數(shù)以外,其他參數(shù)只有在每行中具有一個以上的結(jié)果時才適用。之一個參數(shù)與sqlite3_exec的第四個參數(shù)相同,它是傳遞給結(jié)果回調(diào)函數(shù)的參數(shù)。第二個參數(shù)是結(jié)果集中的結(jié)果行數(shù)。第三個參數(shù)是由結(jié)果行中的每個元素組成的數(shù)組。第四個參數(shù)是包含每個結(jié)果行中的列名的數(shù)組。
查詢數(shù)據(jù)的示例代碼如下:
“`c
#include
#include
int callback(void *data, int argc, char **argv, char **azColName)
{
int i;
for (i = 0; i
{
printf(“%s = %s\n”, azColName[i], argv[i] ? argv[i] : “NULL”);
}
printf(“\n”);
return 0;
}
int mn(int argc, char **argv)
{
sqlite3 *db;
char *sql;
char *errmsg;
int rc;
rc = sqlite3_open(“test.db”, &db);
if (rc)
{
fprintf(stderr, “Can’t open database: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
else
{
printf(“Opened database successfully!\n”);
}
sql = “SELECT * from COMPANY;”;
rc = sqlite3_exec(db, sql, callback, NULL, &errmsg);
if (rc != SQLITE_OK)
{
fprintf(stderr, “SQL error: %s\n”, errmsg);
sqlite3_free(errmsg);
}
else
{
printf(“Operation done successfully!\n”);
}
sqlite3_close(db);
return 0;
}
“`
在上述示例代碼中,我們定義了一個名為callback的結(jié)果回調(diào)函數(shù)。然后,我們使用sqlite3_exec函數(shù)執(zhí)行了一個SQL查詢,該查詢以指定的回調(diào)函數(shù)作為第三個參數(shù)。如果查詢期間出現(xiàn)錯誤,我們將輸出錯誤消息并釋放錯誤消息。否則,我們將輸出成功執(zhí)行的消息。
4.更新數(shù)據(jù)
要更新從SQLite數(shù)據(jù)庫中檢索出的數(shù)據(jù),我們可以使用sqlite3_exec函數(shù)。我們可以將UPDATE語句傳遞給該函數(shù),并指定要更新的行和列。
更新數(shù)據(jù)的示例代碼如下:
“`c
#include
#include
int mn(int argc, char **argv)
{
sqlite3 *db;
char *errmsg;
int rc;
rc = sqlite3_open(“test.db”, &db);
if (rc)
{
fprintf(stderr, “Can’t open database: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
else
{
printf(“Opened database successfully!\n”);
}
char *sql = “UPDATE COMPANY set SALARY = 25000.00 where ID=1; “;
rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
if (rc != SQLITE_OK)
{
fprintf(stderr, “SQL error: %s\n”, errmsg);
sqlite3_free(errmsg);
}
else
{
printf(“Total updated rows: %d\n”, sqlite3_changes(db));
}
sqlite3_close(db);
return 0;
}
“`
在上述示例代碼中,我們通過UPDATE語句將ID為1的記錄的薪水更新為25000.00。然后,我們將該SQL語句傳遞給sqlite3_exec函數(shù)。如果更新期間出現(xiàn)錯誤,我們將輸出錯誤消息并釋放錯誤消息。否則,我們將輸出成功更新的行數(shù)。
5.刪除數(shù)據(jù)
要從SQLite數(shù)據(jù)庫中刪除數(shù)據(jù),我們可以使用sqlite3_exec函數(shù)。我們可以將DELETE語句傳遞給該函數(shù),并指定要刪除的行和列。
刪除數(shù)據(jù)的示例代碼如下:
“`c
#include
#include
int mn(int argc, char **argv)
{
sqlite3 *db;
char *errmsg;
int rc;
rc = sqlite3_open(“test.db”, &db);
if (rc)
{
fprintf(stderr, “Can’t open database: %s\n”, sqlite3_errmsg(db));
sqlite3_close(db);
return 1;
}
else
{
printf(“Opened database successfully!\n”);
}
char *sql = “DELETE from COMPANY where ID=1; “;
rc = sqlite3_exec(db, sql, NULL, NULL, &errmsg);
if (rc != SQLITE_OK)
{
fprintf(stderr, “SQL error: %s\n”, errmsg);
sqlite3_free(errmsg);
}
else
{
printf(“Total deleted rows: %d\n”, sqlite3_changes(db));
}
sqlite3_close(db);
return 0;
}
“`
在上述示例代碼中,我們使用DELETE語句刪除ID為1的記錄。然后,我們將該SQL語句傳遞給sqlite3_exec函數(shù)。如果刪除期間出現(xiàn)錯誤,我們將輸出錯誤消息并釋放錯誤消息。否則,我們將輸出成功刪除的行數(shù)。
:
相關(guān)問題拓展閱讀:
- sqlite怎么連接數(shù)據(jù)庫文件
- 怎么用C語言動態(tài)往sqlite3里面插入數(shù)據(jù)
sqlite怎么連接數(shù)據(jù)庫文件
sorry, 沒安裝”sqlite developer”.
若只是想導(dǎo)出sqlite數(shù)據(jù)庫中的表數(shù)據(jù)皮蘆可以很簡備塵單地用燃滾帶sqlite命令:
tim@ubtim:~/workspace$ sqlite3
SQLite version 3.7.9:49:22
Enter “.help” for instructions
Enter SQL statements terminated with a “;”
sqlite> create table tb_test (field int, val varchar(3));
sqlite> insert into tb_test values (1, ‘a(chǎn)’);
sqlite> insert into tb_test values (2, ‘b’);
sqlite> insert into tb_test values (3, ‘c’);
sqlite> .mode csv
sqlite> .output tb_test.csv
sqlite> select * from tb_test;
sqlite> .q
tim@ubtim:~/workspace$ cat tb_test.csv
1,a
2,b
3,c
tim@ubtim:~/workspace$
是什么語言想要模襲連接差敗的呢,不同語言的操作差別挺旦慶兄大的
~~~~~~~
~~~~~~~~~~~~~
~~~~~
怎么用C語言動態(tài)往sqlite3里面插入數(shù)據(jù)
首先說明這個問題困擾了我很長時間了,肆御嚴(yán)格地說應(yīng)該有兩天,不過終于通過sqlite的官方文檔解決了。
For example, assume the string variable zText contains text as follows:
char *zText = “It’s a happy day!”;
One can use this text in an SQL statement as follows:
char *zSQL = sqlite3_mprintf(“州雹唯INSERT INTO table VALUES(‘%q’)”, zText); sqlite3_exec(db, zSQL, 0, 0, 0); sqlite3_free(zSQL);
摘自liuzhidong123的冊培專欄
ORDER BY 列 ASC
c連接sqlite數(shù)據(jù)庫語句的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于c連接sqlite數(shù)據(jù)庫語句,C語言中使用SQLite數(shù)據(jù)庫的連接語句詳解,sqlite怎么連接數(shù)據(jù)庫文件,怎么用C語言動態(tài)往sqlite3里面插入數(shù)據(jù)的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)成都網(wǎng)站建設(shè)公司提供專業(yè)的建站服務(wù),為您量身定制,歡迎來電(028-86922220)為您打造專屬于企業(yè)本身的網(wǎng)絡(luò)品牌形象。
成都創(chuàng)新互聯(lián)品牌官網(wǎng)提供專業(yè)的網(wǎng)站建設(shè)、設(shè)計、制作等服務(wù),是一家以網(wǎng)站建設(shè)為主要業(yè)務(wù)的公司,在網(wǎng)站建設(shè)、設(shè)計和制作領(lǐng)域具有豐富的經(jīng)驗。
新聞標(biāo)題:C語言中使用SQLite數(shù)據(jù)庫的連接語句詳解(c連接sqlite數(shù)據(jù)庫語句)
文章出自:http://fisionsoft.com.cn/article/ccsjjjc.html


咨詢
建站咨詢
