SQLite學習筆記1 - 源碼編譯&基本操作
一、環境配置
操作系統:Windows10
下載地址:
https://www.sqlite.org/download.html
windows環境下載zip版本:
二、編譯
根據官網說明來操作
cmd
中輸入cl shell.c sqlite3.c -Fesqlite3.exe
創建一個aaa.db
數據庫,創建表test
sqlite3.exe aaa.db
create table test(id integer primary key, value text);
插入三條數據
insert into test(id, value)values (1,'aaa');
insert into test(id, value)values (2,'bbb');
insert into test(value)values ('ccc');
//設置列的模式顯示
.mode column
.headers on
select * from test;
select last_insert_rowid()
插入三條數據
insert into test(id, value)values (1,'aaa');
insert into test(id, value)values (2,'bbb');
insert into test(value)values ('ccc');
設置列的模式顯示
.mode column
.headers on
select * from test;
select last_insert_rowid()
三、使用vs編寫數據庫操作
創建一個控制臺項目,sqlite3.c
和sqlite3.h
作為源文件添加到項目中。
操作數據庫代碼:
#include"sqlite3.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int MyCallback(void* para, int nColumn, char** colValue, char** colName);
int main(int argc, char* argv[])
{
sqlite3* db = NULL;
int result = sqlite3_open("test.db", &db);
if (result != SQLITE_OK)
{
printf("open database text.db failed \n");
return 0;
}
else
{
printf("open database text.db success \n");
}
//開始執行sqlite
const char* sql = "create table Student(t_id integer primary key autoincrement, t_name varchar(15), t_age integer)";
char* errMsg = NULL;
result = sqlite3_exec(db,
sql,
NULL,
NULL,
&errMsg);
if (result != SQLITE_OK)
{
printf("create table Student failed\n");
printf("error conde %d \t error message:%s", result, errMsg);
}
//插入數據
errMsg = NULL;
sql = "insert into Student(t_name, t_age) values ('dwb', 23)";
result = sqlite3_exec(db,
sql,
NULL,
NULL,
&errMsg);
printf("insert message1:%s \n", errMsg);
errMsg = NULL;
sql = "insert into Student(t_name, t_age) values ('dhx', 25)";
result = sqlite3_exec(db,
sql,
NULL,
NULL,
&errMsg);
printf("insert message2:%s \n", errMsg);
errMsg = NULL;
sql = "insert into Student(t_name, t_age) values ('dwz', 21)";
result = sqlite3_exec(db,
sql,
NULL,
NULL,
&errMsg);
printf("insert message3:%s \n", errMsg);
errMsg = NULL;
sql = "select * from Student;";
result = sqlite3_exec(db, sql, MyCallback, NULL, &errMsg);
printf("select message:%s \n", errMsg);
//執行不用回調函數的sql語句,先要設置函數所需的參數
printf("\nUSEING sqlite3_get_table()----------------------------\n");
sql = "select * from Student;";
int nCols;
int nRows;
char** azResult;
errMsg = NULL;
int index = 0;
result = sqlite3_get_table(db, sql, &azResult, &nRows, &nCols, &errMsg);
printf("result = %d \t errMsg = %s \n", result, errMsg);
printf("rows:%d \t cols: %d \n", nRows, nCols);
index = nCols;
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
for (int i = 0; i < nRows; i++)
{
for (int j = 0; j < nCols; j++)
{
printf("%s::%s", azResult[j], azResult[index]);
index++;
printf("\n");
}
}
printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
sqlite3_free_table(azResult);
sqlite3_close(db);
return 0;
}
int MyCallback(void* para, int nColumn, char** colValue, char** colName)
{
printf("----------------------------------------------------\n");
printf("包含的列數:%d\n", nColumn);
for (int i = 0; i < nColumn; i++)
{
printf("%s :%s\n", *(colName + i), colValue[i]);//指針和數組的兩種寫法
}
printf("----------------------------------------------------\n");
return 0;
}
智能推薦
Android學習筆記:數據庫----持久化存儲技術SQLite的基本使用方法
通過項目實踐,來熟悉利用SQLiteDatabase來操作SQLite的基本用法。 一、SQLite數據庫 1、創建 (1)、SQLite通過SQLiteOpenHelper幫助類來更方便的管理數據庫,SQLiteOpenHelper是一個抽象類,需要被繼承后實現自己的幫助類。 (2)、SQLiteOpenHelper有兩個抽象方法需要重寫:onCreate()和onUpgrade(),即創建和升...
Tomcat學習筆記(1)Tomcat源碼下載與編譯運行
1.習慣寫個序~ 做為一名JavaWeb開發,幾乎天天要跟Tomcat打交道,但是一直以來對它的理解都是很模糊的,對于Web框架,我都只是知道大概怎么用,背后的原理也是一無所知,腦海里都沒有一個完整的體系圖,剛好趁武漢疫情這段時間,訂閱了一個這方面的課程,準備把這方面的知識好好補習一下~ 這是我的第二篇博客,希望通過博客把我的學習思路分享給同樣想補習這方面知識的小伙伴們,同時也是對自己學習過程的一...
ArrayList源碼學習筆記(1)
背景 之前關注了一個公眾號“彤哥讀源碼”,跟著一起學習了jdk里的很多類的源碼,包括集合類、線程類、并發類。真的是很好的公眾號,哈哈(因為確實是很好,這里愿意給路過的小伙伴安利一下,純自己主觀推薦,如果對公眾號作者有幫助,算是感謝這么好的文章對我的幫助了~) 其中,ArrayList是最簡單的一個了,但是讀完別人寫的東西其實還是不如自己實踐來的實在。所以自己再搞點東西。 文...
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 以上述例子,判斷一個生產出...