SQLite学习(八) - SQLite C编程接口
老版本的SQLite編程接口很簡單,只有5個接口。隨著新功能的增加,新版本的SQLite有185個編程接口。 但是不用擔心,核心API還是很容易理解的。
?
1. 先來介紹核心對象和接口
(1) 數據庫連接對象 sqlite3
(2) 執行語句對象 sqlite3_stmt
sqlite3_stmt不是必須的, 因為接口sqlite3_exec或sqlite3_get_table提供了直接訪問數據庫的功能,但是理解sqlite3_stmt對理解sqlite是如何工作的很有幫助。
?
請看一下SQLite核心接口, 這些名字只是概念上的, 真正的名字可能不一樣,或者可能有多個版本。比如sqlite3_open() 有sqlite3_open16() and sqlite3_open_v2().
??? * sqlite3_open(), 創建數據庫連接,返回sqlite3_db
??? * sqlite3_prepare(), 創建sqlite3_stmt對象
??? * sqlite3_step(),? 前進到下一行
??? * sqlite3_column(), 取得某一列的值,有很多別名
??? * sqlite3_finalize(), 銷毀sqlite3_stmt對象
??? * sqlite3_close(), 關閉數據庫連接sqlite3_db, 釋放資源。
?
sqlite3_column()有以下:
??? * sqlite3_column_blob()
??? * sqlite3_column_bytes()
??? * sqlite3_column_bytes16()
??? * sqlite3_column_count()
??? * sqlite3_column_double()
??? * sqlite3_column_int()
??? * sqlite3_column_int64()
??? * sqlite3_column_text()
??? * sqlite3_column_text16()
??? * sqlite3_column_type()
??? * sqlite3_column_value()
?
另外兩個很有用的接口
sqlite3_reset(), 重新執行已經存在的sqlite3_stmt
sqlite3_bind(),? 使一個prepared statement 執行多次時,綁定到不同的數據源, 比如INSERT多行數據
?
2. 擴展SQLite的API
??? * sqlite3_create_collation()
??? * sqlite3_create_function()
??? * sqlite3_create_module()
??? * sqlite3_aggregate_context()
??? * sqlite3_result()
??? * sqlite3_user_data()
??? * sqlite3_value()
跟多詳細做法請看date.c and func.c
本文只介紹了部分核心API,其他API請看SQLite API Reference
?
3. 來個例子
1 struct {2 char*name; char*occ;
3 } values[]={
4 "Li Lei", "CEO", "Han Meimei", "CPO",
5 "Lily", "COO", "Lucy", "CFO",
6 };
7 #define LEN(x) sizeof(x)/sizeof(x[0])
8 void my_first_sqlite3_func()
9 {
10 int i;
11 sqlite3 *db;
12 sqlite3_stmt *stmt;
13 char name[16], occ[16];
14 char*sql_drop="drop table if exists people;";
15 char*sql_create="create table people (name, occupation);";
16 char*sql_insert="insert into people values (?, ?);";
17 char*sql_select="select * from people;";
18
19 sqlite3_open("D:/first_0704.db", &db);
20 sqlite3_prepare(db, sql_drop, strlen(sql_drop), &stmt, NULL);
21 sqlite3_step(stmt);
22
23 sqlite3_prepare(db, sql_create, strlen(sql_create), &stmt, NULL);
24 sqlite3_step(stmt);
25
26 sqlite3_prepare(db, sql_insert, strlen(sql_insert), &stmt, NULL);
27 for(i=0;i<LEN(values);i++)
28 {
29 //printf("INSERT name=%s, occ=%s\n",values[i].name, values[i].occ);
30 sqlite3_bind_text(stmt, 1, values[i].name, strlen(values[i].name), SQLITE_STATIC);
31 sqlite3_bind_text(stmt, 2, values[i].occ, strlen(values[i].occ), SQLITE_STATIC);
32 sqlite3_step(stmt);
33 sqlite3_reset(stmt);
34 }
35
36 sqlite3_prepare(db, sql_select, strlen(sql_select), &stmt, NULL);
37 i=0;
38 while(SQLITE_DONE !=sqlite3_step(stmt))
39 {
40 printf("Result[%d]: name=%s, occ=%s\n",41 i++,42 sqlite3_column_text(stmt, 0),43 sqlite3_column_text(stmt, 1));44 }45 46 sqlite3_finalize(stmt);47 sqlite3_close(db);48 }
轉載于:https://www.cnblogs.com/lifan3a/articles/7027514.html
總結
以上是生活随笔為你收集整理的SQLite学习(八) - SQLite C编程接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS7下搭建yum仓库
- 下一篇: Sum of AP series——AP