欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:數(shù)據(jù)庫 SQLite

柚子快報邀請碼778899分享:數(shù)據(jù)庫 SQLite

http://yzkb.51969.com/

1、SQLite簡介

? ? ? ? 輕量化、易用的嵌入式數(shù)據(jù)庫,用于設(shè)備端的數(shù)據(jù)管理,可以理解成單點(diǎn)的數(shù)據(jù)庫。傳統(tǒng)服務(wù)器型數(shù)據(jù)庫用于管理多端設(shè)備,更加復(fù)雜。

? ? ? ? SQLite是一個無服務(wù)器的數(shù)據(jù)庫,是自包含的。這也稱為嵌入式數(shù)據(jù)庫,這意味著數(shù)據(jù)庫引擎作為應(yīng)用程序的一部分運(yùn)行。

? ? ? ? MySQL需要運(yùn)行服務(wù)器,MySQL將需要客戶端和服務(wù)器架構(gòu)通過網(wǎng)絡(luò)進(jìn)行交互。

優(yōu)點(diǎn)缺點(diǎn)SQLite

基于文件,易于設(shè)置和使用

適合基礎(chǔ)開發(fā)和測試

輕松攜帶

使用標(biāo)準(zhǔn)

SQL

語法進(jìn)行微小更改

使用方便

缺乏用戶管理和安全功能

不容易擴(kuò)展

不適合大數(shù)據(jù)庫

無法定制

MySQL

使用方便

提供了許多與數(shù)據(jù)庫相關(guān)的功能

良好的安全功能

易于擴(kuò)展,適用于大型數(shù)據(jù)庫

提供良好的速度和性能

提供良好的用戶管理和多種訪問控制

需要一些技術(shù)專業(yè)知識來設(shè)置

與傳統(tǒng)

SQL

相比,語法略有不同

? ? ? ? 基于嵌入式的數(shù)據(jù)庫主要有:SQLite,F(xiàn)irebird,Berkeley DB,eXtremeDB

? ? ? ? ????????Firebird 是關(guān)系型數(shù)據(jù)庫,功能強(qiáng)大,支持存儲過程,SQL兼容等;

????????????????SQLite?是關(guān)系型數(shù)據(jù)庫,體積小,支持ACID事務(wù);

????????????????Berkeley DB 并沒有數(shù)據(jù)庫服務(wù)器的概念,他的程序直接鏈接到應(yīng)用程序中;

????????????????eXtremeDB 是內(nèi)存數(shù)據(jù)庫,運(yùn)行效率高。

2、SQLite安裝

? ? ? ? 方式一:

sudo apt-get install sqlite

? ? ? ? 方式二:去官網(wǎng)下載(https://www.sqlite.org/download.html),然后傳到開發(fā)板上

tar xvf sqlite-autoconf-3460000.tar.gz

cd sqlite-autoconf-3460000

#在該文件夾中會有一些幫助文檔,readme.txt會教你怎么用

#./configure --help 可以查看一些參數(shù)

#指定安裝目錄

./configure PREFIX=/usr/local

#編譯,大概要花10分鐘

make

#安裝

sudo make install

#編譯完成后回到home目錄下,輸入sqlite3會出現(xiàn)以下界面

splite3

#退出

.quit

?3、SQLite的命令用法

????????創(chuàng)建一個數(shù)據(jù)庫

//方式一, 使用.open方式創(chuàng)建 test 數(shù)據(jù)庫

sqlite3 //進(jìn)入數(shù)據(jù)庫

.open test.db

.quit //退出

//方式二

sqlite3 test.db //在命令運(yùn)行當(dāng)前窗口創(chuàng)建數(shù)據(jù)庫test.db

//在數(shù)據(jù)庫命令下

.databases //列出當(dāng)前打開的數(shù)據(jù)庫

.quit //退出

? ? ? ? 創(chuàng)建一張表格

//在SQLite中int型要用Integer表示

create table stu2(id Integer, name char, score Integer);

? ? ? ? 插入一條記錄

insert into stu values(18130106,'huang',99);

insert into stu2 values(18130101,"gang",100); //''和""都行

insert into stu(name,score) values("huanggang",98); //插入部分字段內(nèi)容

? ? ? ? 查看數(shù)據(jù)庫的記錄

select * from stu; //查詢所有字段的結(jié)果

select name,score from stu; //查詢數(shù)據(jù)庫中部分字段的內(nèi)容

? ? ? ? 刪除一條記錄

delete from stu where id = 18130101;

? ? ? ? 更改一條記錄

update stu set name = 'huangg' where id = 18130106;

????????刪除一張表

drop table stu;

? ? ? ? 增加一列

alter table stu add column sex char;

4、SQLite的編程操作

4.1?打開/創(chuàng)建數(shù)據(jù)庫的C接口

????????相關(guān)API

sqlite3_open(const char *filename, sqlite3 **ppDb)

//該例程打開一個指向 SQLite 數(shù)據(jù)庫文件的連接,返回一個用于其他 SQLite 程序的數(shù)據(jù)庫連接對象。

sqlite3_close(sqlite3*)

//該例程關(guān)閉之前調(diào)用 sqlite3_open() 打開的數(shù)據(jù)庫連接。所有與連接相關(guān)的語句都應(yīng)在連接關(guān)閉之前完成。

//如果還有查詢沒有完成,sqlite3_close() 將返回 SQLITE_BUSY 禁止關(guān)閉的錯誤消息。

const char *sqlite3_errmsg(sqlite3*);

sqlite3_errcode() //通常用來獲取最近調(diào)用的API接口返回的錯誤代碼.

#include

#include

int main(int argc, char* argv[])

{

sqlite3 *db;

int ret;

if(argc < 2){

printf("Usage: %s xxx.db\n", argv[0]);

return -1;

}

//sqlite3_open 打開一個數(shù)據(jù)庫,如果沒有則會創(chuàng)建一個

if((ret == sqlite3_open(argv[1], &db)) == SQLITE_OK){

printf("open %s success\n", argv[1]);

}else{

//sqlite3_errmsg 查詢錯誤信息

printf("error: %s\n", sqlite3_errmsg(db));

return -1;

}

//sqlite3_close 關(guān)閉之前調(diào)用 sqlite3_open() 打開的數(shù)據(jù)庫連接。所有與連接相關(guān)的語句都應(yīng)在連接關(guān)閉之前完成。

//如果還有查詢沒有完成,sqlite3_close() 將返回 SQLITE_BUSY 禁止關(guān)閉的錯誤消息。

sqlite3_close(db);

printf("done\n");

return 0;

}

4.2?創(chuàng)建表的C接口

????????相關(guān)API

sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)

//該例程提供了一個執(zhí)行 SQL 命令的快捷方式,SQL 命令由 sql 參數(shù)提供,可以由多個 SQL 命令組成。

//在這里,第一個參數(shù) sqlite3 是打開的數(shù)據(jù)庫對象,sqlite_callback 是一個回調(diào),data 作為其第一個參數(shù),errmsg 將被返回用來獲取程序生成的任何錯誤。

//sqlite3_exec() 程序解析并執(zhí)行由 sql 參數(shù)所給的每個命令,直到字符串結(jié)束或者遇到錯誤為止。

int callback(void *arg, int column_size, char *column_value[], char *column_name[])

//參數(shù)分析:void *arg:是sqlite3_exec函數(shù)的第四個參數(shù)

//column_size:數(shù)據(jù)庫的字段數(shù) column_value[]:列的值 column_name:字段名字

#include

#include

//void *arg sqlite3_exec函數(shù)的第四個參數(shù)

//int column_size 數(shù)據(jù)庫的字段數(shù)

//char *column_value[] 列的值

//char *column_name[] 字段名字

int callback(void *arg, int column_size, char *column_value[], char *column_name[])

{

int i;

printf("arg = %s\n", (char *)arg);

for(i=0; i

printf("%s = %s\n", column_name[i], column_value[i]);

}

printf("===================\n");

//必須使用return 0 這樣數(shù)據(jù)庫有多少條數(shù)據(jù)就會回調(diào)幾次,不然只會回調(diào)1次

return 0;

}

int main(int argc, char* argv[])

{

sqlite3 *db;

char *errorMsg = NULL;

int ret;

if(argc < 2){

printf("Usage: %s xxx.db\n", argv[0]);

return -1;

}

//sqlite3_open 打開一個數(shù)據(jù)庫,如果沒有則會創(chuàng)建一個

if((ret == sqlite3_open(argv[1], &db)) == SQLITE_OK){

printf("open %s success\n", argv[1]);

}else{

//sqlite3_errmsg 查詢錯誤信息

printf("error: %s\n", sqlite3_errmsg(db));

return -1;

}

sqlite3_exec(db, "select * from stu;", callback, "context of sql", &errorMsg);//errorMsg may sigment error!

//sqlite3_close 關(guān)閉之前調(diào)用 sqlite3_open() 打開的數(shù)據(jù)庫連接。所有與連接相關(guān)的語句都應(yīng)在連接關(guān)閉之前完成。

//如果還有查詢沒有完成,sqlite3_close() 將返回 SQLITE_BUSY 禁止關(guān)閉的錯誤消息。

sqlite3_close(db);

printf("done\n");

return 0;

}

4.3?插入數(shù)據(jù)的C接口

#include

#include

//void *arg sqlite3_exec函數(shù)的第四個參數(shù)

//int column_size 數(shù)據(jù)庫的字段數(shù)

//char *column_value[] 列的值

//char *column_name[] 字段名字

int callback(void *arg, int column_size, char *column_value[], char *column_name[])

{

int i;

printf("arg = %s\n", (char *)arg);

for(i=0; i

printf("%s = %s\n", column_name[i], column_value[i]);

}

printf("===================\n");

//必須使用return 0 這樣數(shù)據(jù)庫有多少條數(shù)據(jù)就會回調(diào)幾次,不然只會回調(diào)1次

return 0;

}

int main(int argc, char* argv[])

{

sqlite3 *db;

char *errorMsg = NULL;

int ret;

if(argc < 2){

printf("Usage: %s xxx.db\n", argv[0]);

return -1;

}

//sqlite3_open 打開一個數(shù)據(jù)庫,如果沒有則會創(chuàng)建一個

if((ret == sqlite3_open(argv[1], &db)) == SQLITE_OK){

printf("open %s success\n", argv[1]);

}else{

//sqlite3_errmsg 查詢錯誤信息

printf("error: %s\n", sqlite3_errmsg(db));

return -1;

}

ret = sqlite3_exec(db, "create table Class01(id Integer, name char, score Integer);", \

callback, "context of sql", &errorMsg);

if(ret != SQLITE_OK){

printf("create tables error: %s\n", errorMsg);

}

//yy 在當(dāng)前行復(fù)制 p 在光標(biāo)位置粘貼

sqlite3_exec(db, "insert into Class01 values(122, 'huang', 99);", \

callback, "context of sql", &errorMsg);//errorMsg may sigment error!

//sqlite3_close 關(guān)閉之前調(diào)用 sqlite3_open() 打開的數(shù)據(jù)庫連接。所有與連接相關(guān)的語句都應(yīng)在連接關(guān)閉之前完成。

//如果還有查詢沒有完成,sqlite3_close() 將返回 SQLITE_BUSY 禁止關(guān)閉的錯誤消息。

sqlite3_close(db);

printf("done\n");

return 0;

}

柚子快報邀請碼778899分享:數(shù)據(jù)庫 SQLite

http://yzkb.51969.com/

相關(guān)閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19208736.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄