linux中sqlite數據庫的簡單使用
時間:2018-09-29 來源:未知
一、 數據庫的安裝
1. 網絡安裝:
配置好網絡源后
sudo apt-get install sqlite3
2.
使用給出的deb包安裝:
Sudo dpkg -i *.deb
安裝三個deb包
使用源碼包安裝:
解壓:tar xzf sqlite-autoconf-3140100.tar.gz
執行./configure
執行make && make install
3.
執行sqlite3 -version進行測試
二、 sqllite命令
創建數據庫:sqlite3 company.db
1.幫助:.help
2.退出sqlite3:.quit
3.顯示當前打開的數據庫文件:.database
4.顯示數據庫中所有表名:.tables
5.查看表的結構:.schema <table_name>
6.控制顯示格式:.mode column .header on
三、SQLite 數據類型
表結構:行:記錄 列:字段 值:字段值
每個存儲在 SQLite 數據庫中的值都具有以下存儲類之一:
1.null:值是一個 NULL 值。
2.integer:值是一個帶符號的整數,根據值的大小存儲在 1、2、3、4、6 或 8 字節中。
3.real:值是一個浮點值,存儲為 8 字節的 IEEE 浮點數字。
4.text:值是一個文本字符串,使用數據庫編碼(UTF-8、UTF-16BE 或 UTF-16LE)存儲。
5.blob:值是一個 blob 數據,完全根據它的輸入存儲。
四、sql命令(以';'結尾)
1.創建表(主鍵)
create table table_name(
column1 datatype primary key,
column2 datatype,
column3 datatype,
.....
columnn datatype,
); //primary保證字段唯一性
實例:(not null 表示記錄被插入時候字段不能為空)
下面是一個實例,它創建了一個 COMPANY 表,ID 作為主鍵,NOT NULL 的約束表示在表中創建紀錄時這些字段不能為 NULL:
create table company(
id int primary key not null,
name text not null,
age int not null,
address char(50),
salary real
);
2.刪除表
drop table <table_name>
drop table company;
3.插入數據
3.1 指定列插入數據
insert into table_name (column1, column2, column3,...columnn) values (value1, value2, value3,...valuen);
3.2 所有列插入數據
insert into table_name values (value1,value2,value3,...valuen);
4.查詢語句
查詢所有
select * from table_name;
查詢指定列
select column1, column2, columnn from table_name;
條件查找
select * from table_name where <表達式>
例:select * from company where id = 7;
5.刪除記錄
delete from table_name where [condition];
如果不使用條件,那么會刪除整個表數據
舉例:
刪除ID=7的表
delete from company where id = 7;
6.修改
update table_name set column1 = value1, column2 = value2...., columnn = valuen where [condition];
如果不使用where指定條件,那么會更新所有的記錄
五、linux編程接口
包含:#include<sqlite3.h>
編譯方式:gcc sqlite1.c -lsqlite3
1.int sqlite3_open(char *path, sqlite3 **db);
功能:打開sqlite數據庫,如果數據庫不存在則創建它
path: 數據庫文件路徑
db: 指向sqlite句柄的指針
返回值:成功返回SQLITE_OK,失敗返回錯誤碼(非零值)
2.int sqlite3_close(sqlite3 *db);
功能:關閉sqlite數據庫
返回值:成功返回SQLITE_OK,失敗返回錯誤碼
返回值:返回錯誤信息
3.執行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 *arg, /* 1st argument to callback */
char **errmsg /* Error msg written here */
);
功能:執行SQL操作
db:數據庫句柄
sql:要執行SQL語句
callback:回調函數(滿足一次條件,調用一次函數,用于查詢)
arg:傳遞給回調函數的參數
errmsg:錯誤信息指針的地址
返回值:成功返回SQLITE_OK,失敗返回錯誤碼
回調函數:
typedef int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);
功能:每找到一條記錄自動執行一次回調函數
para:傳遞給回調函數的參數(由 sqlite3_exec() 的第四個參數傳遞而來)
f_num:記錄中包含的字段數目
f_value:包含每個字段值的指針數組(列值)
f_name:包含每個字段名稱的指針數組(列名)
返回值:成功返回SQLITE_OK,失敗返回-1,每次回調必須返回0后才能繼續下次回調
4.不使用回調函數執行SQL語句
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int*nrow, int *ncolumn, char **errmsg);
功能:執行SQL操作
db:數據庫句柄
sql:SQL語句
resultp:用來指向sql執行結果的指針
nrow:滿足條件的記錄的數目(但是不包含字段名)
ncolumn:每條記錄包含的字段數目
errmsg:錯誤信息指針的地址
返回值:成功返回SQLITE_OK,失敗返回錯誤碼

