SQLite筆記-基本命令-c語言的使用
一、數據庫介紹
1、數據庫的基本概念
數據
能夠輸入計算機并能被計算機程序識別和處理
的信息集合
數據庫
數據庫是在數據庫管理系統管理和控制之下,存放在存儲介質上的數據集合
2、常用的數據庫
1)大型數據庫
1)oracle公司是最早開發數據庫的廠商之一,目前oracle關系數據卡產品的市場占有率名列前茅。
2)IBM的DB2是第一個具備上網功能的多媒體關系數據庫管理系統,支持linux在內的一系列平臺
2)中型數據庫
server是微軟開發的數據庫,主要支持windows
3)小型數據庫
mySQL是一個小型關系型數據庫管理系統,開發者為瑞典MySQL AB公司,2008年被Sun收購,開放源碼。后面Sun被oracle收購
3、基于嵌入式的數據庫
1)基于嵌入式linux的數據庫有SQLite,Firebird,BerkeleyDB,eXtremeDB
2)Firebird是關系型數據庫,功能強大,支持存儲過程,SQL兼容
3)SQLite關系型數據庫,體積小,支持ACID事務。(不支持嚴格的數據類型檢測)
4)BerkeleyDB沒有數據庫服務器概念,它的程序直接連接到應用程序中
5)eXtremeDB是內存數據庫,運行效率高
4、SQLite基礎
SQLite的源代碼是c,其源代碼完全開放,SQLite第一個Alpha版本誕生于2005年5月,他是一個輕量級的嵌入式數據庫。
SQLite以下特性
-零配置-無需安裝和管理配置
-儲存在單一的磁盤文件中的一個完整的數據庫
-數據庫文件可以在不同字節順序的機器間自由共享
-支持數據庫大小至2TB
-足夠小,全部源碼大致3w的c代碼,250kb
-比目前流行的大多數數據庫的操作要快
二、SQLite的安裝
1.在線安裝
sudo apt-get install sqlite3
2.SQLite的基本命令
sqlite3 student.db
創建一個學生數據庫
3.系統命令
以.開頭的命令為系統命令
.help
幫助
.quit
退出
.exit
退出
.schema
查看表的結構圖
.databases
查看打開的數據庫
.table
查看表格
4.sql命令
1)基本的sql命令,不以.開頭,以;結尾
2)創建一張數據庫表stu
create table stu(id Integer , name char , score Integer);
3)插入一條記錄
insert into stu values(1001,'zhangsan',80);
//所有字段都有插入
insert into stu (name, score)values(1003,"wangwu");
//部分字段插入操作
4)查詢記錄
select * from stu;
//查詢所有字段
select name,score from stu;
//查詢部分字段
select * from stu where score=80 and id =1001;
//按條件查詢 and
select * from stu where score=80 or id =1001;
//按條件查詢 or
5)刪除記錄
delete from stu where name='lisi';
6)更新一條記錄
update stu set name='wangwu' where id=1001;
update stu set name='wangwu',score=88 where id=1001;
7)更改表格插入一列
alter table stu add column address char;
//添加一列地址
8)刪除一列
sqlite3不支持,直接刪除一列
1–創建一張新的表
create table stu1 as select id,name,score from stu;
2–刪除原有的表
drop table stu;
3–將新表名字改為原來的名字
alter table stu1 rename to stu;
三、c語言操作SQLite3數據庫
1.SQLite3編程接口
1)打開sqlite數據庫
int sqlite3_open(char *path, sqlite3 **db)
-path:數據庫文件路徑
-db:指向sqlite句柄的指針(指針)
-返回值,成功為0,失敗為錯誤碼
-返回值:成功 SQLITE_OK
int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
2)關閉sqlite數據庫
int sqlite3_close(sqlite *db)
-返回值,成功為0,失敗為錯誤碼
-返回值:成功 SQLITE_OK
3)錯誤信息
const char *sqlite3_errmsg(sqlite3 *db)
-返回值:返回錯誤信息的首地址
4)執行一條sql語句
int sqlite3_exec(
sqlite3* db, /* An open database */
const char *sql, /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**), /* Callback function */
void *, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
功能:執行一條sql語句
參數:
-db 數據庫句柄
-sql 一條sql語句
-callback 回調函數,只有sql為查詢語句時候,才會執行此句
-arg 表示給回調函數傳參數
-errmsg 錯誤消息
返回值:
-成功 SQLITE_OK
回調函數的查詢
int (*callback)(void*,int,char**,char**), /* Callback function */
功能:查詢的結果是一個函數指針,傳函數名
-功能:每找到一條記錄自動執行一次回調函數
-para :傳遞回調函數的參數
-f_num: 記錄包含的字段數目
-f_value: 包含每個字段值的指針數組
-f_name: 包含每個字段名稱的指針數組
-返回值:成功為0,失敗為-1
不使用回調函數的查詢
int sqite3_get_table(sqlite3 *db,const char *sql, char ****resultp, int *nrow, int *ncolumn, char **errmsg)
-功能:執行SQL操作
-db:句柄
-sql:SQL語句
-resultp:用來指向sql執行結果的指針
-nrow:滿足條件的記錄的數目
-ncolumn:每條記錄包含的字段數目
-errmsg:錯誤信息指針的地址
-返回值:成功返回0, 失敗返回值錯誤碼
c語言的編譯
gcc student.c -lsqlite3
描述:找不到頭文件
原因:系統沒有安裝函數庫
解決辦法:
sudo apt-get install libsqlite3-dev
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#define DATABASE "stu.db"
int do_insert(sqlite3 *db)
{
int id;
char name[32] = {0};
int score;
char sql[128] = {};
char *errmsg;
printf("Input id:");
scanf("%d", &id);
getchar();
printf("Input name:");
scanf("%s", &name[0]);
getchar();
printf("Input score:");
scanf("%d", &score);
getchar();
sprintf(sql, "insert into stu values(%d,'%s',%d);",id, name, score); //拼接
if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
return -1;
}
else
{
printf("insert success");
}
return 0;
}
int do_delete(sqlite3 *db)
{
int id;
char sql[128] = {};
char *errmsg;
printf("Input id:");
scanf("%d", &id);
getchar();
sprintf(sql, "delete from stu where id=%d;",id); //拼接
if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
return -1;
}
else
{
printf("delete success");
}
return 0;
}
int do_update(sqlite3 *db)
{
int id;
char sql[128] = {};
int score;
char *errmsg;
printf("Input id:");
scanf("%d", &id);
getchar();
printf("Upadate score:");
scanf("%d", &score);
getchar();
sprintf(sql, "update stu set score = %d where id=%d;",score, id); //拼接
if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
return -1;
}
else
{
printf("update success");
}
return 0;
}
int callback(void* para,int f_num,char** f_value,char** f_name)
{
int i = 0;
for (i=0; i < f_num; i++)
{
printf("%-11s",f_value[i]);
}
putchar(10);
return 0;
}
int do_query(sqlite3 *db)
{
char sql[128] = {};
char *errmsg;
sprintf(sql, "select * from stu;"); //拼接
if (sqlite3_exec(db, sql, callback, NULL, &errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
return -1;
}
else
{
printf("query success");
}
return 0;
}
int do_query1(sqlite3 *db)
{
char sql[128] = {};
char *errmsg;
char **resultp;
int nrow;
int ncloumn;
int i,j;
int index;
sprintf(sql, "select * from stu;"); //拼接
if (sqlite3_get_table(db, sql, &resultp, &nrow,&ncloumn, &errmsg) != SQLITE_OK)
{
printf("%s\n",errmsg);
return -1;
}
else
{
printf("query1 success");
}
index = ncloumn;
for (i = 0; i<nrow; i++)
{
for(j = 0; j <ncloumn; j++)
{
printf("%-11s",resultp[index++]);
}
putchar(10);
}
return 0;
}
int main(int argc, const char *argv[])
{
sqlite3 *db;
char *errmsg = NULL;
int cmd;
if (sqlite3_open(DATABASE, &db) != SQLITE_OK)
{
printf("%s.\n",sqlite3_errmsg(db));
return -1;
}
else
{
printf("open database success.\n");
}
// 創建一張數據庫的表格
if (sqlite3_exec(db, "create table stu (id Intger, name char, score Intger);",NULL,NULL,&errmsg) != SQLITE_OK)
{
printf("%s.\n",errmsg);
return -1;
}
else
{
printf("create table success.\n");
}
while (1)
{
printf("*****************************************\n");
printf("1:insert 2:delete 3:query 4:updata 5:query1 6:quit \n");
printf("*****************************************\n");
scanf("%d", &cmd);
switch (cmd)
{
case 1:
do_insert(db);
break;
case 2:
do_delete(db);
break;
case 3:
do_query(db);
break;
case 4:
do_update(db);
break;
case 5:
do_query1(db);
break;
case 6:
sqlite3_close(db);
exit(0);
default:
break;
}
}
return 0;
}
智能推薦
【Git學習筆記】1:Git的基本命令
Linux環境直接安裝一個git就可以在CLI使用git,在Windows環境下載使用Git bash就可以了。 Git結構 畫張圖記錄。 設置身份 其中--global表示對本機上所有Git倉庫都使用該配置。 創建版本庫 在要管理的目錄下使用: 則在該目錄下會生成一個.git子目錄,即為Git版本庫。若要刪除版本庫,直接移除這個子目錄即可。 添加文件到暫存區 實際是將對文件的修改添加到暫存區st...
HCIA筆記5 VRP的基本命令
VRP操作 命令權限等級 0-15 文件系統管理命令 基本查詢命令 目錄操作 文件操作 重點:保存命令 保存命令save(必須在用戶模式下才可以使用) 正在運行的(在內存里的)鍵入save會保存在flash:下的vrpcfg.zip里面 系統啟動文件查詢 display startup查看下次系統啟動的文件 配置系統下次啟動時使用的文件 startup saved-configuration 比較...
(docker筆記):Docker 鏡像的基本命令
目錄 Docker 鏡像的基本命令 幫助命令 docker images 鏡像命令 docker search 鏡像搜索 docker pull 下載鏡像 指定版本下載 docker rmi 刪除鏡像 Docker 鏡像的基本命令 幫助命令 查看幫助文檔:https://docs.docker.com/engine/reference/run/ docker images 鏡像命令 查看所有本地主...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
猜你喜歡
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...