1.sqlite3的使用
1.打開數據庫
sqlite3 stu.db? //database
2.操作
輸入 sqlite3,進入軟件后,輸入 sqlite3? 軟件自帶的命令(.help,.databases,·quit,.exit)
3.增刪改查
增
CREATE TABLE database_name.table_name(column1 datatype PRIMARY KEY(one or more columns),column2 datatype,column3 datatype,.....columnN datatype, );例子: create table stu(name, sex, age, score); create table stu1(name text, sex text, age int, score real); 創建一張表驗證:.table //可以看到表的名字.schema//可以看到表的字段
//往表中添加信息 插入一條記錄 語法: INSERT INTO TABLE_NAME [(column1, column2, column3,...columnN)] VALUES (value1, value2, value3,...valueN);//全部列都給到 insert into stu values("tom", "male", 19, 88.5); insert into stu1 values("ousca", "fmale", 18, 98.5);//給一部分列插入數據 insert into stu1(name, sex) values("jack", "male");
注意:sql語句后面必須以分號結尾
刪
刪除表中的數據 DELETE FROM table_name WHERE [condition];delete from 表名 where 條件;刪除表 DROP TABLE database_name.table_name;drop table 表名;
改
添加字段 ALTER TABLE database_name.table_name RENAME TO new_table_name; alter table 表名 add 列名;例子: alter table stu add stuno; name sex age score stuno ---------- ---------- ---------- ---------- ---------- ousca fmale 18 98.5 tom male 19 88.5
修改表的數據 UPDATE table_name SET column1 = value1, column2 = value2...., columnN = valueN WHERE [condition];update 表名 set 列1=值1 [,列2=值2,...][匹配條件];條件語句: where 字句 where 列名 操作符 列值 where age > 10update stu set stuno=110 where name="ousca" name sex age score stuno ---------- ---------- ---------- ---------- ---------- ousca female 18 98.5 110 tom male 19 88.5 111
查
//查詢 SELECT column1, column2, columnN FROM table_name;select 列名1, 列名2,... from 表名;select * from 表名;//查看表的所有信息sqlite3命令: .headers on //打開表頭 .mode column //指定查詢的輸出格式, column是以列對齊的方式name sex age score ---------- ---------- ---------- ---------- ousca female 18 98.5 tom male 19 88.5
查詢: 1.查詢部分字段 select name from stu where score>80; 2.in語句 selectt * from stu where age in(18,19); 3.and語句//多個條件 select * from stu where age >18 and score > 80; 4.or語句 select * from stu where age > 18 or score > 80; 5.范圍between...and ... select * from stu where age between 19 and 20; 6. like select * from stu where name like "tom"; select*from stuwhere name 1ike"&tom&";//%表示匹配任意多個字符 select * from stu where name like "_tom_";表示匹配任意一個字符
4.補充
//插入時間信息 create table user1(id int,name char,age int,dt datetime); eg:insert into user1 values (1,'張三',18,datetime('now','+8 hours')); //utcid name age dt ---------- ---------- ---------- ------------------- 1 張三 18 2025-08-29 15:38:02
//自動增長列 create table user5 (id INTEGER PRIMARY KEY ASC,name char, age int); PRIMARY KEY//主鍵 ASC//自動增長的順序//int需要寫成INTEGER才能實現自動增長 create table user4 (id int PRIMARY KEY ASC,name char, age int) ;id name age dt ---------- ---------- ---------- ------------------- 1 李四 21 2025-08-29 15:48:10 2 王二 22 2025-08-29 15:48:21 3 張三 25 2025-08-29 15:48:34
2.函數學習
類似于文件操作 ---- stu.db (單獨的數據庫文件)
1.打開
#include <sqlite3.h> int sqlite3_open(char *db_name,sqlite3 **db); 功能:打開數據庫。 參數:@db_name:數據庫文件名,若文件名包含ASCII碼表范圍的之外的字符,則其必需是(UTF-8)編碼。@db:數據庫標識,此結構體為數據庫操作句柄。通過此句柄可對數據庫文件進行相應操作。 返回值:成功返回 SQLITE_OK失敗返回 非SQLITE_OK
2.sql語句
sqlite3_exec 函數: int sqlite3_exec(sqlite3*db,const char *sql,exechandler_t callback,void *arg,char **errmsg);功能: 執行sql指向的SQL 語句,若結果集不為空,函數會調用函數指針callback所指向的函數。參數:db:數據庫的標識。sql:SQL語句(一條或多條),以';'結尾。callback:是回調函數指針,當這條語句執行之后,sqlite3會去調用你提供的這個函數。arg:當執行 sqlite3_exec 的時候傳遞給回調函數的參數。errmsg:存放錯誤信息的地址,執行失敗后可以查閱這個指針。返回值:成功返回SQLITE_OK,失敗返回 非SQLITE_OK。打印錯誤信息方法:printf("%s\n"errmsg);
回調函數指針: typedef int(*exechandler_t)(void *para,int n_column,char **column_value,char **column_name);功能:此函數由用戶定義,當sqlite3_exec函數執行sql查詢語句后,結果集不為空時sqlite3_exec函數會自動調用此函數,每次調用此函數時會把結果集的一行信息傳給此函數。參數:@para:sqlite3_exec傳給此函數的參數,para為任意數據類型的地址。@n_column:結果集的列數。@column_value:指針數組的地址,其存放一行信息中各個列值的首地址。@column_name:指針數組的地址,其存放一行信息中各個列值對應列名的首地址。返回值:若為非0值,則通知 sqlite3_exec終止回調。
sqlite3_get_table 函數: int sqlite3_get_table(sqlite3 *db,const char *sql,char ***resultp,int *nrow,int *ncolumn,char **errmsg);功能: 執行Sql指向的SQL語句,函數將結果集相關的數據的地址保存在函數的參數中。參數:db:數據庫的標識。sql:SQL語句(一條或多條),以';'結尾。resultp:指針數組的地址,其記錄了結果集的數據。內存布局:先依次存放各列的列名,然后是每一行各列的值。nrow:結果集的行數(不包含列名)。ncolumn:結果集的列數。errmsg:錯誤信息。
sqlite3 free_table 函數: void sqlite3_free_table(char **resultp); 功能:釋放sqlite3_get_table分配的內存。 參數:結果集數據的首地址。
3.關閉
int sqlite3_close(sqlite3 *db); 功能:關閉數據庫、釋放打開數據庫時申請的資源。 參數:db:數據庫的標識。 返回值:成功返回 SQLITE_OK。失敗返回 非 SQLITE_OK。