sqlite庫學習(7)sqlite讀取
下載地址:https://download.csdn.net/download/no2101/12428235。
1、sqlite3_exec
static int select_callback(void *NotUsed, int argc, char **argv, char **azColName) {
int i;
for (i = 0; i < argc; i++) {
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf(" %s \n", (char*)NotUsed);
return 0;
}
void DB_Select_table_test1(sqlite3 *db)
{
char *zErrMsg = 0;
int rc;
char *sql;
const char* data = "select_callback function called";
sql = "SELECT * from TESTTABLE";
/* Execute SQL statement */
rc = sqlite3_exec(db, sql, select_callback, (void*)data, &zErrMsg);
if (rc != SQLITE_OK) {
printf("SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
}
else {
printf("sqlite3_exec select done successfully\n");
}
}
需要callback
2、sqlite3_get_table
void DB_Select_table_test2(sqlite3 *db)
{
char *errmsg = NULL;
char** dbResult = NULL;
char *sql = "SELECT * from TESTTABLE";
int nRow, nColumn;
int result = sqlite3_get_table(db, sql, &dbResult, &nRow, &nColumn, &errmsg);
//查詢成功
int index = nColumn; //dbResult 前面第一行數據是字段名稱,從 nColumn 索引開始才是真正的數據
for (int i = 0; i < nRow; i++)
{
for (int j = 0; j < nColumn; j++)
{
printf("字段名:%s 字段值:%s 長度:%d\n", dbResult[j], dbResult[index], strlen(dbResult[index]));
++index; // dbResult 的字段值是連續的,從第0索引到第 nColumn - 1索引都是字段名稱,從第 nColumn 索引開始,后面都是字段值,它把一個二維的表(傳統的行列表示法)用一個扁平的形式來表示
}
printf("\n");
}
sqlite3_free_table(dbResult);//釋放查詢空間
printf("sqlite3_get_table select done successfully\n");
}
速度比較慢,不建議使用。
3、sqlite3_prepare_v2
void DB_Select_table_test3(sqlite3 *db)
{
char *sql = "SELECT * from TESTTABLE;";
sqlite3_stmt * stmt3 = NULL;
if (sqlite3_prepare_v2(db, sql, strlen(sql), &stmt3, NULL) != SQLITE_OK)
{
if (stmt3)
sqlite3_finalize(stmt3);
sqlite3_close(db);
return;
}
int fieldCount = sqlite3_column_count(stmt3);//stmt3返回的是查詢結果集
do
{
int r = sqlite3_step(stmt3);
if (r == SQLITE_ROW) {
for (int i = 0; i < fieldCount; ++i) {
int vtype = sqlite3_column_type(stmt3, i);//字段類型獲取
//const char* dtype = sqlite3_column_decltype(stmt3, i);//INT REAL之類
const char* otype = sqlite3_column_origin_name(stmt3, i);//申明
printf("%s ", otype);
//判斷當前記錄當前字段的類型,根據返回的類型使用不同的API函數
//獲取實際的數據值
if (vtype == SQLITE_INTEGER) {
int v = sqlite3_column_int(stmt3, i);
printf("is %d.\n", v);
}
else if (vtype == SQLITE_FLOAT) {
double v = sqlite3_column_double(stmt3, i);
printf("is %f.\n", v);
}
else if (vtype == SQLITE_TEXT) {
const char* v = (const char*)sqlite3_column_text(stmt3, i);
printf("is %s.\n", v);
}
else if (vtype == SQLITE_NULL) {
printf("is NULL.\n");
}
}
}
else if (r == SQLITE_DONE) {
printf("finish successfully\n");
break;
}
else {
printf("Failed to SELECT.\n");
sqlite3_finalize(stmt3);
sqlite3_close(db);
return;
}
printf("\n");
} while (true);
printf("sqlite3_prepare_v2 select done successfully\n");
}
智能推薦
sqlite學習(1)編譯sqlite
Sqlite數據庫簡介 SQLite是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統。 它很小,只有sqlite3.h、sqlite3ext.h、sqlite3.c三個C語言文件。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,我...
android學習筆記----SQLite數據庫
目錄 用SQLite語句執行: 利用SQLiteDatabase中自帶的增刪改查操作: SQLite數據庫的事務介紹: 目錄一二的增刪改查源碼地址:https://github.com/liuchenyang0515/CreateDB3 目錄三事務介紹的源碼地址:https://github.com/liuchenyang0515/BankTransfer ...
《Java》《SQLite》Java讀取SQLite數據庫中的表
用Java讀出數據庫中表的內容 SQLite數據庫的連接、SQLite數據庫建表在我的博客中已經詳細介紹。 在成功建立Java與SQLite數據庫的連接后,便可以查詢、操作數據庫中的表,主要用到JDBC中的三個接口,分別是Connection接口、Statement接口、ResultSet接口。 Con...
c# WinForm 讀取SQLite數據庫中信息
參考網址: https://www.cnblogs.com/nsky/p/4479850.html 1、新建WinForm項目,創建Button 2、右鍵解決方案資源管理器——管理NuGet程序包——搜索sqlite,下載System.Data.SQLite(x86/x64)——下載后AppConfig內容為&mda...
Sqlite 數據庫:
1.1 SQL 語法: http://www.w3school.com.cn/sql/ SQL 語句對大小寫不敏感。 表名稱 mytable , 列: id name iage 1.1.1 SELECT - 從數據庫表中獲取數據 SELECT 列名稱 FROM 表名稱 SELECT * FROM 表名稱 的信息 SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值 下面的運算符可在 ...
猜你喜歡
數據庫SQLite
數據庫SQLite 了解最輕巧的數據庫SQLite SQLite,是一款輕型的數據庫,占用資源非常低,它的源代碼不受版權限制,能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名數據庫管理系統來講,它的處理速度比他們都快。SQLite的最新...
SQLite數據庫
1.SQLite數據庫簡介 SQLite 是一個開源的、內嵌式的關系型數據庫,第一個版本誕生于 2000 年 5 月,目前最高版本為 SQLite3。 學習網站:http://www.runoob.com/sqlite/sqlite-tutorial.html 安裝方法:( 我用的是ubuntu12.04) 字符界面: 圖形界面: SQLite 特性: 零配置 、靈活、可移植、自由的授權、緊湊、可...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...