IT培训机构|91免费精品视频|专注编程培训|91免费精品|软件开发培训_91免费国产视频_华清远见教育

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 嵌入式數據庫是什么

嵌入式數據庫是什么 時間:2018-02-23      來源:未知

SQLite,是一款輕型的數據庫,其設計目標是嵌入式的數據庫,而且當前在很多嵌入式產品中使用到了sqlite數據庫,sqlite數據庫占用資源非常的低,對嵌入式設備而言,內存是非常寶貴的,而sqlite數據庫可能只需要幾百K的內存就夠了。

Sqlite數據庫還能夠支持Windows/Linux/Unix等等主流的操作系統,其跨平臺的可移植性特別強,這極大的拓展了其生存的空間。

同時能夠跟很多程序語言相結合,比如C#、PHP、Java,C等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名數據庫管理系統來講,它的處理速度比他們都快,比起Oracle數據庫來說,免費也是極大的優勢。

SQLite第一個Alpha版本誕生于2000年5月,至2018年已經有18個年頭, SQLite 3也已經發布,并成功的進入了我們的事業。

除了上面提到的低內存占用率、跨平臺可移植性、多語言支持、免費開源,sqlite3數據庫還有強大的功能,比如支持數據庫大小可達2TB,十多萬行的代碼非常適合學習,良好的代碼注釋等等。

那么我們學習數據庫好可以快速的入門,在門外徘徊太久的話會挫傷我們學習的積極性。如果你是一個嵌入式的學習和開發者,那么從以下兩個方面出發可以幫你快速的上手sqlite3數據庫:

1、Sqlite3的命令 :數據庫的創建及增刪改查

2、2、sqlite3 API函數接口:用API接口實現數據庫的創建及增刪改查

當然了,以下是基于Ubuntu平臺做的測試:

1-- 安裝數據庫:

在線安裝:sudo apt-get install sqlite sqlite3

sudo apt-get install libsqlite3-dev

sudo apt-get install sqlitebrowser

離線安裝:

下載安裝下面三個包:

libsqlite3-0_3.7.2-1ubuntu0.1_i386.deb

libsqlite3-dev_3.7.2-1ubuntu0.1_i386.deb

sqlite3_3.7.2-1ubuntu0.1_i386.deb

sudo dpkg -i *.deb  (數據庫安裝文件)

2、Sqlite3的命令

2.1、創建數據庫

sqlite3 stu.db

必須指定數據庫名字

2.2、sqlite命令

系統命令 以 "."開頭

普通命令 ,以";"結束

.schema 查看表的結構

.quit 退出數據庫

.exit 退出數據庫

.help 查看幫助信息

.databases 查看數據庫

.tables 顯示數據庫中所有的表的表名

2.3、sqlite3 的使用 : 增刪改查

1-- 創建一張表

create table 表名(字段名稱1 字段類型,字段名稱2 字段類型, ....);

create table stu(id int, name char, sex char , score int);

2-- 向表中插入一條記錄

insert into 表名 values (字段值1,字段值2,...);

insert into stu values(1001, 'zhangsan', 'm', 89);

insert into stu (id, name, sex,score) values(1002, 'lisi', 'm', 99);

3-- 查詢記錄

select * from stu; // 查找所有的記錄

select * from stu where id=1001; // 查找符號條件的記錄

select * from stu where id=1001 and name='zhangsan'; // 字符串需要加引號

select * from stu where name = 'zhangsan' or score=92;

4-- 刪除記錄

delete from stu where id=1004;

5-- 更新記錄

update stu set score=98 where id=1003;

6-- 刪除一張表

drop table stu;

7-- 添加一列

alter table stu add column score int;

8-- 刪除一列

sqlite3 不允許直接刪除一列

1)先創建一張新表

create table stu1 as select id , name from stu;

2)刪除原來的舊表

drop table stu;

3)對新表重命名

alter table stu1 rename to stu;

9-- 數據庫主鍵(既設置的數據將會是唯一存在的)

create table usr(name text primary key , passwd text);

3、sqlite3 API 函數接口:

學習API函數接口,那么首先要掌握函數接口的三要素: 功能--參數--返回值,

然后就是寫代碼去驗證我們隊函數的理解,然后將函數用到實際的項目開發當中

(1)int sqlite3_open(

const char *filename, /* Database filename (UTF-8) */

sqlite3 **ppDb /* OUT: SQLite db handle */

);

功能:打開一個數據庫

參數:filename 數據庫名字

ppdb 操作數據庫的指針,句柄。

返回值:成功 SQLITE_OK , 失敗 error_code

(2)const char *sqlite3_errmsg(sqlite3* db);

功能:獲取錯誤信息描述

(3)int sqlite3_close(sqlite3* db);

功能:關閉一個數據庫

(4)int sqlite3_exec(

sqlite3* db, /* An open database */

const char *sql, /* SQL to be evaluated */

int (*callback)(void*,int,char**,char**), /* Callback function */

void * arg, /* 1st argument to callback */

char **errmsg /* Error msg written here */

);

功能:執行一條sql語句

參數:db 數據庫的句柄指針

sql 將要被執行sql語句

callback 回調函數, 只有在查詢語句時,才給回調函數傳參

arg 為callback 傳參的

errmsg 錯誤信息的地址

返回值:成功 SQLITE_OK

出錯 errcode 錯誤碼

int (*callback)(void* arg ,int ncolumn ,char** f_value,char** f_name)

功能:得到查詢結果

參數:arg 為回調函數傳遞參數使用的

ncolumn 記錄中包含的字段的數目

f_value 包含每個字段值的指針數組

f_name 包含每個字段名稱的指針數組

返回值:成功 0,出錯 非0

(5)int sqlite3_get_table(

sqlite3 *db, /* An open database */

const char *zSql, /* SQL to be evaluated */

char ***pazResult, /* Results of the query */

int *pnRow, /* Number of result rows written here */

int *pnColumn, /* Number of result columns written here */

char **pzErrmsg /* Error msg written here */

);

功能:查詢數據庫,它會創建一個新的內存區域來存放查詢的結果信息

參數:db 數據庫操作句柄

sql 數據庫的sql語句

azResult 查詢的結果

nRow 行數

nColumn 列數

errmsg 錯誤消息

返回值:

成功 0

出錯 errcode

nrow的值為查詢到的符合條件的記錄數(不包括字段名)。

ncolumn的值為查詢到的符合條件的字段數。

注意:nrow的值不包括字段名,如果打印時用for (i = 0; i < nrow; i++)會打印出字段名,但是會少打印出一條符合條件的記錄。

因此打印時要用 for (i = 0; i

(6)void sqlite3_free_table(char **result);

功能:釋放內存

4、下面我們先來測一下sqlite命令的使用:

fengjunhui@ubuntu:~/Sqlite$ sqlite3 fengjunhui.db

SQLite version 3.7.2

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite> create table stu(id int,name char,sex char,score int);

sqlite> insert into stu values(1001,'fengjunhui','m',88);

1001|fengjunhui|m|88

1002|liuxiaofan|m|92

1003|luzhengyu|m|96

1004|xiaohui|m|86

sqlite> select * from stu where name=fengjunhui ;

Error: no such column: fengjunhui         ----注意類型匹配

sqlite> select * from stu where name = 'fengjunhui';

1001|fengjunhui|m|88

sqlite> select * from stu where id=1003;

1003|luzhengyu|m|96

sqlite> update stu set sex = f where id=1002;

Error: no such column: f

sqlite> update stu set sex ='f' where id=1002;

sqlite> select * from stu

...> ;

1001|fengjunhui|m|88

1002|liuxiaofan|f|92

1003|luzhengyu|m|96

1004|xiaohui|m|86

sqlite> delete from stu where name='xiaohui';

sqlite> select * from stu;

1001|fengjunhui|m|88

1002|liuxiaofan|f|92

1003|luzhengyu|m|96

sqlite> alter table stu add column age int;

sqlite> select * from stu ;

1001|fengjunhui|m|88|

1002|liuxiaofan|f|92|

1003|luzhengyu|m|96|

sqlite> update stu set age = 25 where id=1001;

sqlite> select * from stu;

1001|fengjunhui|m|88|25

1002|liuxiaofan|f|92|

1003|luzhengyu|m|96|

sqlite> create table stu_bak as select id,name,sex,score from stu;

sqlite> .table

stu stu_bak

sqlite> .schema

CREATE TABLE stu(id int,name char,sex char,score int, age int);

CREATE TABLE stu_bak(

id INT,

name TEXT,

sex TEXT,

score INT

);

sqlite> drop table stu;

sqlite> alter table stu_bak rename to stu;

sqlite> .table

stu

sqlite> create table usr(name text primary key,passwd text);

sqlite> .talbe

Error: unknown command or invalid arguments: "talbe". Enter ".help" for help

sqlite> .table

stu usr

5、sqlite3 API函數接口的使用

測試源碼:

#include

#include

//注意:編譯時需要手動鏈接庫文件 -lsqlite3

#define DATABASE "student.db"

#define N 128

#define IS_NUM(index) (0 <= index && index <= 9) ? 1 : 0

int flags = 0;

int do_insert(sqlite3 *db)

{

int id;

char name[N];

int score;

char sql[N];

char *errmsg;

printf("please input id >>> ");

scanf("%d", &id);

getchar();

printf("please input name >>> ");

scanf("%s", name);

getchar();

printf("please input score >>> ");

scanf("%d", &score);

getchar();

sprintf(sql, "insert into stu values(%d, '%s', %d)", id, name, score);

if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)

{

printf("%s\n", errmsg);

}

else

{

printf("the datas is inserted successfully\n");

}

return 0;

}

//回調函數負責得到查詢的結果

int callback(void *arg, int ncolumn, char **f_value, char **f_name)

{

int i = 0;

if(flags == 0)

{

for(i = 0; i < ncolumn; i++)

{

printf("%-11s", f_name[i]);

}

putchar(10);

flags = 1;

}

for(i = 0; i < ncolumn; i++)

{

printf("%-11s", f_value[i]);

}

putchar(10);

return 0;

}

//查詢數據

int do_select(sqlite3 *db)

{

char *errmsg;

if(sqlite3_exec(db, "select * from stu", callback, NULL, &errmsg) != SQLITE_OK){

printf("%s\n", errmsg);

}else{

printf("the datas is selected successfully\n");

}

return 0;

}

int do_update(sqlite3* db)

{

int id,score;

char name[N]={0},columnname[N]={0},columntype[N]={0};

int num,index;

char* errmsg;

char sql[N]={0};

printf("input your index for search: 1 id 2 name 3 score: \n");

scanf("%d",&index);

getchar();

if(index == 1){

printf("input id : \n");

scanf("%d",&id);

}else if(index == 2){

printf("input name : \n");

scanf("%s",name);

}else {

printf("input score: \n");

scanf("%d",&score);

}

printf("your choice whose info to update: 1 id 2 name 3 score 4 colum: \n");

scanf("%d",&num);

getchar();

switch(num)

{

case 1:

printf("please input id: ");

scanf("%d",&id);

getchar();

if(index == 1){

printf("input sorry,the same info,no need change.\n ");

}else if(index == 2){

sprintf(sql,"update stu set id=%d where name='%s'",id,name);

}else if(index == 3){

sprintf(sql,"update stu set id=%d where score=%d",id,score);

}if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){

printf("%s\n",errmsg);

}

break;

case 2:

printf("please input name: ");

scanf("%s",name);

getchar();

if(index == 1){

sprintf(sql,"update stu set name=%s where id='%d'",name,id);

}if(index == 2){

printf("input sorry,the same info,no need change.\n ");

}else if(index == 3){

sprintf(sql,"update stu set name=%s where score=%d",name,score);

}if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){

printf("%s\n",errmsg);

}

break;

case 3:

printf("please input socre: ");

scanf("%d",&score);

getchar();

if(index == 1) {

sprintf(sql,"update stu set score=%d where id='%d'",score,id);

}else if(index == 2){

sprintf(sql,"update stu set score=%d where name=%s",score,name);

} else if(index == 3){

printf("input sorry,the same info,no need change.\n ");

}

if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){

printf("%s\n",errmsg);

}

break;

case 4:

printf("please input column name: ");

scanf("%s",columnname);

getchar();

printf("please input column type: INT or CHAR");

scanf("%s",columntype);

getchar();

sprintf(sql,"alter table stu add column '%s' '%s' '",columnname,columntype);

if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){

printf("%s\n",errmsg);

}

break;

default:

printf("input illegal.\n");

}

printf("the datas is update successfully\n");

return 0;

}

int do_delete(sqlite3* db)

{

int i=0;

char table[N]={0};

int id,score,index;

char name[N]={0};

char* errmsg;

char sql[N]={0};

char *delsql[5]={0};

printf("\n");

do_select(db); //printf database info list

printf("\n");

printf("input index for delete: 1 id 2 name 3 score 4 table 5 colum: \n");

scanf("%d",&index);

getchar();

if(index == 1){

printf("input id : \n");

scanf("%d",&id);

sprintf(sql,"delete from stu where id=%d",id);

}else if(index == 2){

printf("input name : \n");

scanf("%s",name);

sprintf(sql,"delete from stu where name=%s",name);

}else if(index == 3){

printf("input score: \n");

scanf("%d",&score);

sprintf(sql,"delete from stu where score=%d",score);

}else if(index == 4){

printf("input which table: \n");

scanf("%s",table);

sprintf(sql,"drop table %s",table);

}else if(index == 5){

#if 0

sprintf(delsql[0],"create table stu1 as select id,name from stu\n");

sprintf(delsql[1],"drop table stu\n");

sprintf(delsql[2],"alter table stu1 rename to stu\n");

#endif

delsql[0] = "create table stu1 as select id,name from stu";

delsql[1] = "drop table stu";

delsql[2] = "alter table stu1 rename to stu";

for(i = 0;i < 3;i ++){

printf("delsql[%d]: %s\n",i,delsql[i]);

}

return 0;

}

if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK){

printf("%s\n",errmsg);

}

return 0;

}

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

{

sqlite3 *db;

char *errmsg;

int num;

//創建(打開)數據庫

if(sqlite3_open(DATABASE, &db) != SQLITE_OK) {

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

}else{

printf("the database is opened successfully\n");

}

//創建一張表

if(sqlite3_exec(db, "create table stu(id int, name char, score int)", NULL, NULL, &errmsg) != SQLITE_OK){

printf("%s\n", errmsg);

}else {

printf("the table is created successfully\n");

}

//對當前表進行增刪改查

while(1)

{

printf("\n");

printf("***1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出***\n");

printf("\n");

printf(">>> ");

scanf("%d", &num);

getchar();

switch(num)

{

case 1:

do_insert(db);

break;

case 2:

flags = 0;

do_select(db);

//do_select_get_table(db);

break;

case 3:

do_update(db);

break;

case 4:

do_delete(db);

break;

case 5:

sqlite3_close(db);

return -1;

default:

printf("please input correct option\n");

}

}

return 0;

}

測試結果:

fengjunhui@ubuntu:~/Sqlite$ ./a.out

the database is opened successfully

table stu already exists

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 2

id name score

1001 liuxiaofan 92

1004 fengjunhui 98

1003 luzhengyu 96

the datas is selected successfully

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 1

please input id >>> 1005

please input name >>> xiaohuihui

please input score >>> 76

the datas is inserted successfully

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 3

input your index for search: 1 id 2 name 3 score:

1

input id :

1004

your choice whose info to update: 1 id 2 name 3 score 4 colum:

3

please input socre: 88

the datas is update successfully

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 2

id name score

1001 liuxiaofan 92

1004 fengjunhui 88

1003 luzhengyu 96

1005 xiaohuihui 76

the datas is selected successfully

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 4

1001 liuxiaofan 92

1004 fengjunhui 88

1003 luzhengyu 96

1005 xiaohuihui 76

the datas is selected successfully

input index for delete: 1 id 2 name 3 score 4 table 5 colum:

2

input name :

fengjunhui

no such column: fengjunhui

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 2

id name score

1001 liuxiaofan 92

1004 fengjunhui 88

1003 luzhengyu 96

1005 xiaohuihui 76

the datas is selected successfully

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 5

fengjunhui@ubuntu:~/Sqlite$ gcc 5_student.c -lsqlite3

fengjunhui@ubuntu:~/Sqlite$ ./a.out

the database is opened successfully

table stu already exists

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 4

id name score

1001 liuxiaofan 92

1004 fengjunhui 88

1003 luzhengyu 96

1005 xiaohuihui 76

the datas is selected successfully

input index for delete: 1 id 2 name 3 score 4 table 5 colum:

2

input name :

'fengjunhui'

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 2

id name score

1001 liuxiaofan 92

1003 luzhengyu 96

1005 xiaohuihui 76

the datas is selected successfully

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 5

fengjunhui@ubuntu:~/Sqlite$ gcc 5_student.c -lsqlite3

fengjunhui@ubuntu:~/Sqlite$ ./a.out

the database is opened successfully

table stu already exists

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 4

id name score

1001 liuxiaofan 92

1003 luzhengyu 96

1005 xiaohuihui 76

the datas is selected successfully

input index for delete: 1 id 2 name 3 score 4 table 5 colum:

5

delsql[0]: create table stu1 as select id,name from stu

delsql[1]: drop table stu

delsql[2]: alter table stu1 rename to stu

1:插入數據 2:查詢數據 3:修改數據 4:刪除數據 5:退出

>>> 5

擴展內容:

sqlite3支持的數據類型:

NULL、INTEGER、REAL、TEXT、BLOB

但是,sqlite3也支持如下的數據類型

smallint 16位整數

integer 32位整數

decimal(p,s) p是精確值,s是小數位數

float 32位實數

double 64位實數

char(n) n長度字符串,不能超過254

varchar(n) 長度不固定大字符串長度為n,n不超過4000

graphic(n) 和 char(n) 一樣,但是單位是兩個字符double-bytes,n不超過127(中文字)

vargraphic(n) 可變長度且大長度為n

date 包含了年份、月份、日期

time 包含了小時、分鐘、秒

timestamp 包含了年、月、日、時、分、秒、千分之一秒

sqlite3支持的函數

【1】日期函數

datetime() : 產生日期和時間

date(): 產生日期

time():產生時間

strftime():對以上3個函數產生的日期和時間進行格式化

用法實例:

1、select date('2011-9-9','+1 day','+1 year'); 結果是 2010-09-10

2、select datetime('now'); 當前日期和時間

3、select datetime('now', 'start of month'); 本月的第一天零點,也可以設置年和日的第一天

4、select datetime('now','+1 hour','-12 minute'); 當前時間加48分鐘

strftime()函數可以將YYYY-MM-DD HH:MM:SS格式的日期字符串轉換為其它形式的字符串

%d:天數,01-31

%f :小數形式的秒,SS.SSS

%H:小時

%j :某一天是該年的第幾天,001-366

%m:月份,00-12

%M:分鐘,00-59

%s:從1970到現在的秒數

%S:秒,00-59

%w:星期,0-6,0是星期天

%W:某天是該年的第幾周,01-53

%Y:年,YYYY

%% 百分號

應用舉例:

select strftime('%Y.%m.%d %H:%M:%S','now','localtime');

二、【算術函數】

abs(X):返回絕對值

max(X,Y[,...]):返回大值

min(X,Y,[,...]):返回小值

random(*):返回隨機數

round(X[,Y]): 四舍五入

三、【字符串處理函數】

length(x) :返回字符串字符個數

lower(x) :大寫轉小寫

upper(x):小寫轉大寫

substr(x,y,Z):截取子串

like(A,B):確定給定的字符串與指定的模式是否匹配

上一篇:linux和ubuntu的區別在哪

下一篇:JTAG接口

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 种植槽系统,移动苗床,多层种植货架,潮汐苗床,物流苗床,潮汐面板,立体旋转育秧床,河北博超温室设备有限公司 | 噪声治理,消声器,隔声屏障,隔声罩,噪声控制,降噪,空调降噪,水泵噪声治理,冷却塔噪声治理-北京华清恒业环保设备有限公司 | 扬州市德友线缆有限公司-业从事高端特种线缆研发、制造、销售与服务。 | 装盒机|装箱机|封箱机|全自动化包装生产线尽在利悦包装机械 | 生物除臭_废气处理_玻璃钢风机_布袋除尘_脱硫脱硝_催化燃烧_生物滤池_广东正州环保科技股份有限公司 | 清河县隆鑫密封件有限公司,汽车用密封条,配电箱柜、集装箱密封胶条,建筑门窗、家具用密封条,无毒环保医用密封条,船舶、农机用密封条,异型产品 | 武汉办公室装修公司-展厅装修_湖北今泰装饰工程有限公司官网_今泰装饰 | 上海恩计仪器首页-微生物限度检测仪-微生物限度仪厂家 | 装盒机_全自动装盒机-温州凯祥包装机械有限公司 | 土壤养分测定仪-土壤养分速测仪-生产厂家-托普云农土壤仪器站 | 南京展览公司|南京会展制作|南京展台搭建|南京展厅设计|企业展览馆 | 十堰急开锁0719-8888139|十堰开锁公司|十堰开锁电话|十堰换锁价格-同福锁城-十堰同福锁城 | 浙江康恩贝制药股份有限公司 | 合金锤头_破碎机锤头_耐磨锤头_巩义市东辰实业有限公司 | 邮政纸箱_淘宝纸箱_抗压纸箱,盐城纸箱,盐城纸箱厂家,盐城承重纸箱-盐城君雅纸箱 | 线性排水沟-成品排水沟-树脂排水沟-树脂混凝土,缝隙式排水沟-时利和 | 河北安润防腐管业股份有限公司-远程供液管路_远程供液_远程供液系统 | 上海专升本-上海统招专升本网 | 济南手板_山东快速成型-山东嘉瑞杰机械科技有限公司 | 青砖厂家,青瓦价格-河北祥庆烧结瓦有限公司| 智能化会议系统|多媒体会议系统|无纸化会议系统|会议音箱|高清视频会议终端|智能化会议室|会议系统|视频会议系统-深圳市航视达科技有限公司 | 淘客联盟平台_网络电话系统-河南英邦软件科技有限公司官网 | 生物除臭塔_生物除臭箱_玻璃钢吸收塔_玻璃钢集气罩_-安丘恒业玻璃钢有限公司 | 制冷加热循环机,密闭高低温一体机,优质密闭低温冷冻机-无锡冠亚恒温制冷技术有限公司 | 扫路车_洗扫车_清扫车_道路清扫车_天锦洗扫车-程力专用汽车股份有限公司 | 厦门,泉州自助餐上门|生日自助餐|婚礼自助餐|公司聚会自助餐|户外烧烤|冷餐|茶歇外卖配送-福建非选餐饮公司 | 唐山森林光线影视文化有限公司 | 宿州电机维修厂家,大型电机维修及二手电机修理到安徽鑫瑞特电机装备有限公司 | 深圳-广州-惠州-东莞-重型货架-悬臂-轻中型货架-深圳市诺普泰仓储设备有限公司 | 神马影院电影网_实时更新秒播电视剧、电影、动漫的网站 _ 神马影院 | 无线|远传|刷卡|光电直读水表_插卡电表[计量准确] | 学校直饮水机-反渗透纯水设备-家用净水器厂家-广州颖圣能源设备 学校洗碗机-郑州洗碗机厂家-商用洗碗机-郑州旭申环保科技有限公司 | 惠声电子、广州市惠声电子科技有限公司、VBS、VBS惠声电子、VBS公共广播生产厂家、VBS广播功放生产厂家、VBS会议系统设备批发、VBSIP网络对讲系统厂家、VBS会议系统厂家、VBS智能中控厂家、VBS专业扩声厂家 | 机锋网-畅享科技品质生活,尽在机锋网 | 游离二氧化硅处理仪-恒温恒湿称重系统-智能蒸馏仪-硫化物酸化吹气仪-萃取仪-COD消解仪 | 中捷摇臂钻,数控钻床,沈阳中捷设备机床厂官网_沈阳中捷数控摇臂钻床厂 | 起名字典|宝宝新生儿男孩女孩起名免费网-诗经周易生辰八字取名字大全 | 青州市科信水处理设备有限公司-ic卡水处理设备厂家-畜牧养殖水处理设备 | 聚丙烯酰胺,聚合氯化铝,重金属捕捉剂,污泥调理剂,活性氧化铝,生石灰,反渗透阻垢剂,工业葡萄糖,硫酸铝,果壳活性炭,柱状活性炭,蜂窝活性炭,石英砂,锰砂-北京雁归来环保科技有限公司-以真诚为立足之本,以质量为生存之本,愿与海内外同仁共创双赢。雁归来人一路走来,气贯长虹,勇锐盖过怯弱,进取压倒苟安!我们紧扣时代脉搏,专注水处理、继往开来! | 江苏鹤心食品有限公司-茶叶_果浆果酱_固体饮料 | 美国Riverhawk轴承,Riverhawk十字弹簧轴承,Riverhawk联轴器,Riverhawk液压工具 |