sqlite資料庫插入過程

2021-10-07 22:35:15 字數 4019 閱讀 5038

1.插入的sql語句:insert or ignore into student (student_number,name,***) values (?,?,?)

2.插入操作**

/*************************

*資料庫插入資料 author:樂樂

*引數:要插入的資料

**************************/

#define insert_msg "insert or ignore into student (student_number,name,***) values (?,?,?)"

void

database_insert

(int number,

const

char

*name,

const

char

****)

//2.繫結資料 int型別

res =

sqlite3_bind_int

(stmt,

1, number);if

(res != sqlite_ok)

//2.繫結資料 字元型

//sqlite_static->傳遞給該字串的指標將有效,直到執行查詢為止

res =

sqlite3_bind_text

(stmt,

2, name,-1

, sqlite_static);if

(res != sqlite_ok)

res =

sqlite3_bind_text

(stmt,

3, ***,-1

, sqlite_static);if

(res != sqlite_ok)

//3.遍歷select執行的返回結果

res =

sqlite3_step

(stmt);if

(sqlite_done == res)

out_free:

//4.銷毀前面被sqlite3_prepare建立的準備語句

//【每個準備語句都必須使用這個函式去銷毀以防止記憶體洩露】

sqlite3_finalize

(stmt)

;out:

if(err <0)

}

3.完整執行**

/***************************************

**demon:建立資料庫 author:樂樂

****************************************/

#include

#include

#define db_path "./student.db"

//資料庫建立路徑

/***************************sql 語句定義 start**********************************/

#define create_table \

"create table if not exists student( " \

"student_number integer default 1," \

"name text default null," \

"*** text default null" \

");"

#define insert_msg "insert or ignore into student (student_number,name,***) values (?,?,?)"

/***************************sql 語句定義 end***********************************/

static sqlite3 *db;

//初始化表

void

init_tab

(sqlite3 *db)

//1.執行sql select語句

res =

sqlite3_prepare_v2

(db, create_table,-1

,&stmt,

null);

if(res != sqlite_ok)

//2.遍歷select執行的返回結果

res =

sqlite3_step

(stmt)

;//sqlite_done == res | sqlite3_step() has finished executing

if(sqlite_done == res)

out_err:

//3.銷毀前面被sqlite3_prepare建立的準備語句

//【每個準備語句都必須使用這個函式去銷毀以防止記憶體洩露】

sqlite3_finalize

(stmt);if

(err <0)

return;}

/*************************

*1.初始化資料庫

*引數:資料庫的路徑

*return 0成功

**************************/

intsqlite_init

(const

char

*path)

res =

sqlite3_initialize()

;//初始化,成功返回sqlite_ok

if(res != sqlite_ok)

//開啟資料庫,(存在開啟,不存在建立)成功返回1

res =

sqlite3_open

(path,

&db);if

(res)

//初始化表

init_tab

(db)

;return0;

}/*************************

*2.資料庫插入資料

*引數:要插入的資料

**************************/

void

database_insert

(int number,

const

char

*name,

const

char

****)

//2.繫結資料 int型別

res =

sqlite3_bind_int

(stmt,

1, number);if

(res != sqlite_ok)

//2.繫結資料 字元型

//sqlite_static->傳遞給該字串的指標將有效,直到執行查詢為止

res =

sqlite3_bind_text

(stmt,

2, name,-1

, sqlite_static);if

(res != sqlite_ok)

res =

sqlite3_bind_text

(stmt,

3, ***,-1

, sqlite_static);if

(res != sqlite_ok)

//3.遍歷select執行的返回結果

res =

sqlite3_step

(stmt);if

(sqlite_done == res)

out_free:

//4.銷毀前面被sqlite3_prepare建立的準備語句

//【每個準備語句都必須使用這個函式去銷毀以防止記憶體洩露】

sqlite3_finalize

(stmt)

;out:

if(err <0)

}int

main()

編譯

執行結果

Shell 插入Sqlite資料庫

由於專案需要,在shell中操作sqlite資料庫,簡單記錄下 services networkkpi 表結構之前已經建立好,所以,直接使用step1 拼接插入sql字串 table sql insert into services networkkpi name,category id,web o...

android中 sqlite資料庫插入速度的優化

前幾天遇到乙個問題,就是關於sqlite插入資料速度慢的問題。看了下sqlite的官方文件,預設情況下sqlite會為每乙個插入語句生成乙個transaction,在轉速為7200的的磁碟驅動器上,每秒鐘最多能完成60個左右的transaction。也就是說預設情況下每秒只能插入60條左右的資料,這...

Sqlite如果插入或更新資料庫

我們經常會用到如果資料庫存在則更新,如果不存在則新增 sql一般寫為 if exists select from table where tableid 1 insert into table else update table 但是sqlite裡沒有if exists這種寫法,它用的是一種更簡單的...