中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站做好了 怎么做解析建網(wǎng)站的軟件有哪些

網(wǎng)站做好了 怎么做解析,建網(wǎng)站的軟件有哪些,優(yōu)化的概念,西安最好的網(wǎng)站建設(shè)公司【六】嵌入式SQLite數(shù)據(jù)庫 文章目錄 【六】嵌入式SQLite數(shù)據(jù)庫1.簡介2.SQLite數(shù)據(jù)庫安裝3.SQLite命令用法1.創(chuàng)建數(shù)據(jù)庫2.創(chuàng)建和查看表格3.插入查看數(shù)據(jù)(記錄)4.刪除更改數(shù)據(jù)(記錄) 4.SQLite編程操作1.打開/創(chuàng)建數(shù)據(jù)庫的C接口2.創(chuàng)建…

【六】嵌入式SQLite數(shù)據(jù)庫

文章目錄

  • 【六】嵌入式SQLite數(shù)據(jù)庫
    • 1.簡介
    • 2.SQLite數(shù)據(jù)庫安裝
    • 3.SQLite命令用法
      • 1.創(chuàng)建數(shù)據(jù)庫
      • 2.創(chuàng)建和查看表格
      • 3.插入查看數(shù)據(jù)(記錄)
      • 4.刪除更改數(shù)據(jù)(記錄)
    • 4.SQLite編程操作
      • 1.打開/創(chuàng)建數(shù)據(jù)庫的C接口
      • 2.創(chuàng)建表并插入數(shù)據(jù)的C接口
      • 3.SELECT操作
      • 4.UPDATE操作
      • 5.DELETE操作

1.簡介

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

SQLite是一個無服務(wù)器的數(shù)據(jù)庫,是自包含的。這也稱為嵌入式數(shù)據(jù)庫,這意味著數(shù)據(jù)庫引擎作為應(yīng)用程序的一部分運行。
MySQL需要運行服務(wù)器,MySQL將需要客戶端和服務(wù)器架構(gòu)通過網(wǎng)絡(luò)進行交互。

SQLite的優(yōu)點SQLite的缺點MySQL的優(yōu)點MySQL的缺點
基于文件,易于設(shè)置和使用
適合基礎(chǔ)開發(fā)和測試
輕松攜帶
使用標準SQL語法進
行微小更改
使用方便
缺乏用戶管理和安全功能
不容易擴展
不適合大數(shù)據(jù)庫
無法定制
使用方便
提供了許多與數(shù)據(jù)庫相關(guān)的功能
良好的安全功能
易于擴展,適用于大型數(shù)據(jù)庫
提供良好的速度和性能
提供良好的用戶管理和多種訪問控制
需要一些技術(shù)專業(yè)知識來設(shè)置
與傳統(tǒng)SQL相比,語法略有不同

基于嵌入式的數(shù)據(jù)庫主要有:SQLite,Firebird,Berkeley DB,eXtremeDB

  1. Firebird 是關(guān)系型數(shù)據(jù)庫,功能強大,支持存儲過程,SQL兼容等
  2. SQLite 關(guān)系型數(shù)據(jù)庫,體積小,支持ACID事務(wù)
  3. Berkeley DB 并沒有數(shù)據(jù)庫服務(wù)器的概念,他的程序直接鏈接到應(yīng)用程序中
  4. eXtremeDB 是內(nèi)存數(shù)據(jù)庫,運行效率高

2.SQLite數(shù)據(jù)庫安裝

安裝方式一:

這個安裝的版本是2

sudo apt-get -y install sqlite

安裝方式二:

總括:

  1. 把下載的文件sqlite-autoconf-3450300.tar.gz上傳到開發(fā)板
  2. 解壓:tar xvf sqlite-autoconf-3450300.tar.gz
  3. cd sqlite-autoconf-3450300 進入文件夾
  4. ./configure --prefix=/usr/local 配置安裝路徑在/usr/local
  5. make 編譯(比較久10分鐘)
  6. sudo make install 安裝

詳細過程

1.下載網(wǎng)址:

https://www.sqlite.org/download.html

下載sqlite3軟件包(每一階段的版本會不一樣,一直在更新)

2.將下載好的壓縮包上傳到開發(fā)板

3.解壓:tar xvf sqlite-autoconf-3450300.tar.gz

4.開始配置編譯

cd sqlite-autoconf-3450300 		   //進入文件夾
./configure --prefix=/usr/local     //配置安裝路徑在/usr/local
make                                 //開始編譯,時間很久,10分鐘左右
sudo make install//安裝

在主頁面打入sqlite3進入數(shù)據(jù)庫

3.SQLite命令用法

里面的很多命令背會就行,會用會改,沒有什么道理可言。

這里只講最基礎(chǔ)的用法,詳細的可以看https://www.runoob.com/sqlite/sqlite-tutorial.html

在正式開始之前建議先建一個名為sqlite的文件夾,方便后續(xù)的項目管理

mkdir sqlite //創(chuàng)建名為sqlite的文件夾
cd sqlite    //進入名為sqlite的文件夾

1.創(chuàng)建數(shù)據(jù)庫

一個數(shù)據(jù)庫可以創(chuàng)建多個表格,每個表格又可以創(chuàng)建多個數(shù)據(jù)

剛進入數(shù)據(jù)庫就會給我們提示創(chuàng)建數(shù)據(jù)庫的方法

熱知識:

.db 文件通常是指 SQLite 數(shù)據(jù)庫文件。SQLite 是一種輕量級的數(shù)據(jù)庫引擎,常用于移動應(yīng)用程序和小型桌面應(yīng)用程序中存儲數(shù)據(jù)。這些文件包含了結(jié)構(gòu)化的數(shù)據(jù),可以通過 SQLite 數(shù)據(jù)庫管理工具或編程語言中的 SQLite 庫進行訪問和操作。

創(chuàng)建方式一:進入數(shù)據(jù)庫后創(chuàng)建

sqlite3 		//進入數(shù)據(jù)庫
.open test.db  //創(chuàng)建名為test.db 的數(shù)據(jù)庫(有的話直接打開,沒有直接創(chuàng)建)
.quit			//退出
數(shù)據(jù)庫退出后在命令當(dāng)前路徑創(chuàng)建數(shù)據(jù)庫test.db

創(chuàng)建方式二:在進入數(shù)據(jù)庫時直接創(chuàng)建

sqlite3 test.db //在命令運行當(dāng)前窗口創(chuàng)建數(shù)據(jù)庫test.db//在數(shù)據(jù)庫命令下
.databases 列出當(dāng)前打開的數(shù)據(jù)庫
.quit 退出

2.創(chuàng)建和查看表格

思考一下我們以前的結(jié)構(gòu)體,其實就很像一個列表。

不過在sqlite數(shù)據(jù)庫里面,int=Inteager

struct stu{int id;char name;int score;
}

2.1在sqlite數(shù)據(jù)庫下的操作:

2.1.1創(chuàng)建表格:

//創(chuàng)建一個名為stu1 的表格
create table stu1(id Integer,name char,score Integer);
create table stu(id Integer,name char,score Integer);

2.1.2查看有哪些表格:

.tables

3.插入查看數(shù)據(jù)(記錄)

以下命令均在數(shù)據(jù)庫命令行中操作

3.1插入數(shù)據(jù):

insert into stu values(18130106,'huang',99);// 必須是單引號'',高版本的sqlite3已經(jīng)不支持雙引號""
insert into stu values(22222226,'ming',59);
insert into stu2(name,score) values('huanggang',98); //插入部分字段內(nèi)容

3.2查看數(shù)據(jù)

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

4.刪除更改數(shù)據(jù)(記錄)

以下命令均在數(shù)據(jù)庫命令行中操作

4.1刪除表

drop table stu;

4.2刪除一條數(shù)據(jù)

delete from stu where id = 18130101;

4.3更改一條數(shù)據(jù)

//	要改的表     改什么              匹配的信息
update stu set name = 'huangg' where id = 18130106;

4.4增加一列

alter table stu add column sex char;

4.SQLite編程操作

注意:文中所講版本為sqlite3,版本過低的請自行更新。

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

下面的 C 代碼段顯示了如何連接到一個現(xiàn)有的數(shù)據(jù)庫。

如果數(shù)據(jù)庫不存在,那么它就會被創(chuàng)建,最后將返回一個數(shù)據(jù)庫對象。

用到的函數(shù)介紹:

1.1 sqlite3_open:打開一個數(shù)據(jù)庫對象;

//1.頭文件
#include <sqlite3.h>
//2.函數(shù)原型
int sqlite3_open(const char *filename, sqlite3 **ppDb);filename:要打開的sqlite3數(shù)據(jù)庫的路徑名ppDb: 二級指針,用來保存打開的數(shù)據(jù)庫的連接對象。//3.返回值
成功返回SQLITE_OK,失敗返回其他值。

返回值所對應(yīng)的宏:

1.2 sqlite3_close:關(guān)閉數(shù)據(jù)庫連接對象

//1.頭文件
#include <sqlite3.h>
//2.函數(shù)原型
int sqlite3_close(sqlite3*);在使用此函數(shù)之前要先調(diào)用 sqlite3_open(); 打開的數(shù)據(jù)庫連接。//3.返回值
所有與連接相關(guān)的語句都應(yīng)在連接關(guān)閉之前完成。
如果還有查詢沒有完成,將返回SQLITE_BUSY 禁止關(guān)閉的錯誤消息。

1.3用于查看錯誤代碼信息:

const char *sqlite3_errmsg(sqlite3*);

1.4常用來獲取最近調(diào)用的API接口返回的錯誤代碼(是錯誤代碼數(shù)字)

sqlite3_errcode(sqlite3*) ;

代碼示例:

編譯:gcc a.c -lsqlite3 鏈接到庫

運行:./a.out test.db 鏈接到已有的數(shù)據(jù)庫(如果沒有會創(chuàng)建一個)

//a.c
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>int main(int argc,char **argv)
{sqlite3 *db = NULL;int ret = 0;if(argc<2){printf("Uage: %s xxx.db\n",argv[0]);exit(-1);}if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){  //打開或創(chuàng)建一個數(shù)據(jù)庫對象 成功返回SQLITE_OK 0printf("ret = %d   create %s ok\n",ret,argv[1]);//打印返回的數(shù)值}else{printf("ret = %d   creat %s fail\n",ret,argv[1]);//打印返回錯誤碼的數(shù)值printf("error num = %d  error mesg:%s\n",sqlite3_errcode(db),sqlite3_errmsg(db));//獲取最近調(diào)用的API接口返回的錯誤代碼 and 錯誤信息輸出if(ret==14){//錯誤碼判斷printf("permisson deny\n");}exit(-1);}sqlite3_close(db);return 0;
}

2.創(chuàng)建表并插入數(shù)據(jù)的C接口

用到的函數(shù)介紹:

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

//1.頭文件
#include <sqlite3.h>
//2.函數(shù)原型
int sqlite3_exec(sqlite3*,                                 const char *sql,                           int (*callback)(void*,int,char**,char**),  void *data,                                   char **errmsg                             );
//3.參數(shù)說明
sqlite3*            : open 打開的數(shù)據(jù)庫的描述符
const char* sql,    : 執(zhí)行的sql功能語句(可以很多語句)
*callback,          : sql語句對應(yīng)的回調(diào)函數(shù)
void* data,         : 傳遞給回調(diào)函數(shù)的指針參數(shù)
char **errmsq       : 錯誤信息

int (*callback):回調(diào)函數(shù)

//1.函數(shù)原型
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
//2.參數(shù)說明
*arg             :是sqlite3_exec函數(shù)的第四個參數(shù)data
column_size      :數(shù)據(jù)庫的字段數(shù)(就是name sec num 這些類型有幾個)
column_value[]   :列的值(就是對應(yīng)的name sec score 對應(yīng)的值)
column_name      :字段名字(就是name sec score的這些名字)
//3.返回值
必須會返回0		//這樣才能數(shù)據(jù)庫中有幾條數(shù)據(jù)回調(diào)函數(shù)就會被調(diào)用幾次。

回調(diào)函數(shù):會先執(zhí)行*sql對應(yīng)的功能命令,然后將結(jié)果傳遞給回調(diào)函數(shù)

代碼示例1:

功能描述:查看數(shù)據(jù)庫表中的數(shù)據(jù)。

必須從頭到尾讀一遍,讀懂讀會

//b.c
#include <stdio.h>
#include <sqlite3.h>
int callback(void *arg, int column_size, char *column_value[], char *column_name[])
{int i;printf("arg=%s\n",(char *)arg);//這個值來自于sqlite3_exec第三個參數(shù)for(i=0;i<column_size;i++){printf("%s = %s\n", column_name[i], column_value[i]);//行名與行值}printf("=======================\n");return 0;//必須返回0,這樣數(shù)據(jù)庫中有多少條數(shù)據(jù),這個回調(diào)函數(shù)就會被調(diào)用多少次
}int main(char argc, char **argv)
{sqlite3 *db;//可以理解為數(shù)據(jù)庫編號,加入打開test.db,那么他有一個類似于文件的描述符,身份證char *errorMes = NULL;//用來存sqlite3_exec第五個參數(shù)的錯誤信息int ret;if(argc < 2){printf("Usage: %s xxx.db\n",argv[0]);return -1;}if( (ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){printf("open %s success\n",argv[1]);//數(shù)據(jù)庫打開成功}else{//打印錯誤信息和錯誤碼printf("error num = %d  error mesg:%s\n",sqlite3_errcode(db),sqlite3_errmsg(db));//printf("error num = %d  error mesg:%s\n",ret               ,sqlite3_errmsg(db)); 與上面同一個意思if(ret == 14){printf("permission den\n");//禁止訪問的意思}return -1;}//sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)//errorMes may sigment error!sqlite3_exec(db, "select * from stu;",callback, "from SQL sqlite3_exec:",&errorMes);sqlite3_close(db);printf("done\n");return 0;
}

sqlite3數(shù)據(jù)庫test.db中的信息:

換成代碼體現(xiàn):

1.編譯:gcc b.c -lsqlite3

2.運行:./a.out test.db

代碼示例2:

功能描述:實現(xiàn)一條建立表格并且插入數(shù)據(jù)的指令

//c.c
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>static 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<column_size;i++){printf("%s = %s\n",column_name[i],(char *)column_value[i]);}printf("========================\n");return 0 ;// 數(shù)據(jù)庫中有幾條數(shù)據(jù)它回調(diào)函數(shù)就會調(diào)用幾次
}
int main(int argc,char **argv)
{sqlite3 *db = NULL;int ret = 0;char *errmsg;char *sql;
//1.參數(shù)出錯報錯if(argc<2){printf("Uage: %s xxx.db\n",argv[0]);exit(-1);}
//2.打開數(shù)據(jù)庫if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK){printf("ret = %d   create %s success\n",ret,argv[1]);}else{printf("ret = %d   creat %s fail\n",ret,argv[1]);printf("error num = %d  error mesg:%s\n",sqlite3_errcode(db),sqlite3_errmsg(db));if(ret==14){printf("permisson deny\n");}exit(-1);}/* Create SQL statement */sql = "create table class1(id Integer,name char,score Integer);" \"insert into class1 values(211,'sun',99);" \"select * from class1;";/* Execute SQL statement */ret = sqlite3_exec(db,sql,callback,"into callback",&errmsg);if( ret != SQLITE_OK ){// printf("ret = %d error message %s\n",ret,errmsg);fprintf(stderr, "SQL error: %s\n", errmsg);sqlite3_free(errmsg);}else{fprintf(stdout, "Records created successfully\n");}printf("Done\n");sqlite3_close(db);return 0;
}

結(jié)果:

1.編譯:gcc c.c -lsqlite3

2.運行:./a.out a.db

3.SELECT操作

下面的 C 代碼段顯示了如何從前面創(chuàng)建的class1表中獲取并顯示記錄:

以下操作其實在上文已經(jīng)體現(xiàn)出來,下面的操作了解即可。

//test1.c
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>static int callback(void *arg, int column_size, char *column_value[], char*column_name[])
{int i ;printf("%s\n",(char *)arg);for(i = 0;i<column_size;i++){printf("%s = %s\n",column_name[i],column_value[i]);}printf("=================================\n");return 0 ;//必須返回0,這樣數(shù)據(jù)庫中有多少條數(shù)據(jù),這個回調(diào)函數(shù)就會被調(diào)用多少次
}int main(int argc,char **argv)
{sqlite3 *db;int ret;char *sql = NULL;char *errmsg = NULL;if(argc<2){printf("Uage: %s xxx.db\n",argv[0]);exit(-1);}if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK ){printf("ret = %d ,open %s success \n",ret,argv[1]);}else{printf("ret = %d,error messsge:%s \n",sqlite3_errcode(db),sqlite3_errmsg(db));exit(-1);}sql = "select * from class1";ret = sqlite3_exec(db,sql,callback,"into callback",&errmsg);printf("ret = %d,error messsge:%s \n",ret,errmsg);sqlite3_close(db);return 0 ;
}

4.UPDATE操作

下面的 C 代碼段顯示了如何使用 UPDATE 語句來更新任何記錄,然后從class1表中獲取并顯示更新的記錄:

update class1 set name = 'lihua' where id = 211;

代碼:

//test2.c
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>int callback(void *arg, int column_size, char *column_value[], char*column_name[])
{int i ;printf("%s\n",(char *)arg);for(i = 0;i<column_size;i++){printf("%s = %s\n",column_name[i],column_value[i]);}printf("=================================\n");return 0 ;//必須返回0,這樣數(shù)據(jù)庫中有多少條數(shù)據(jù),這個回調(diào)函數(shù)就會被調(diào)用多少次
}int main(int argc,char **argv)
{sqlite3 *db;int ret;char *sql = NULL;char *errmsg = NULL;if(argc<2){printf("Uage: %s xxx.db\n",argv[0]);exit(-1);}if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK ){printf("ret = %d ,open %s success \n",ret,argv[1]);}else{printf("ret = %d,error messsge:%s \n",sqlite3_errcode(db),sqlite3_errmsg(db));exit(-1);}
/*******************************先查看class1表里面有什么數(shù)據(jù)調(diào)用update 更新一條數(shù)據(jù)再次查看class1表里面的數(shù)據(jù)
********************************/sql = "select * from class1;" \"update class1 set name = '李明' where id = 211;"\"select * from class1;";ret = sqlite3_exec(db,sql,callback,"into callback",&errmsg);//獲取錯誤碼,和錯誤信息if( ret != SQLITE_OK ){//fprintf(stderr, "SQL error: %s\n", errmsg);printf("ret = %d,error messsge:%s \n",ret,errmsg);sqlite3_free(errmsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0 ;
}

5.DELETE操作

下面的 C 代碼段顯示了如何使用 DELETE 語句刪除任何記錄,然后從 class1 表中獲取并顯示剩余的記錄:

刪除表中的數(shù)據(jù):

delete from stu where id = 211;

代碼:

#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>int callback(void *arg, int column_size, char *column_value[], char*column_name[])
{int i ;printf("%s\n",(char *)arg);for(i = 0;i<column_size;i++){printf("%s = %s\n",column_name[i],column_value[i]);}printf("=================================\n");return 0 ;//必須返回0,這樣數(shù)據(jù)庫中有多少條數(shù)據(jù),這個回調(diào)函數(shù)就會被調(diào)用多少次
}int main(int argc,char **argv)
{sqlite3 *db;int ret;char *sql = NULL;char *errmsg = NULL;if(argc<2){printf("Uage: %s xxx.db\n",argv[0]);exit(-1);}if((ret = sqlite3_open(argv[1],&db)) == SQLITE_OK ){printf("ret = %d ,open %s success \n",ret,argv[1]);}else{printf("ret = %d,error messsge:%s \n",sqlite3_errcode(db),sqlite3_errmsg(db));exit(-1);}/*******************************先查看class1表里面有什么數(shù)據(jù)調(diào)用delete 刪除一條數(shù)據(jù)再次查看class1表里面的數(shù)據(jù)
********************************/sql = "select * from class1;" \"delete from class1 where id = 211;"\"select * from class1;";ret = sqlite3_exec(db,sql,callback,"into callback",&errmsg);//獲取錯誤碼,和錯誤信息if( ret != SQLITE_OK ){//fprintf(stderr, "SQL error: %s\n", errmsg);printf("ret = %d,error messsge:%s \n",ret,errmsg);sqlite3_free(errmsg);}else{fprintf(stdout, "Operation done successfully\n");}sqlite3_close(db);return 0 ;
}

對嵌入式SQLite數(shù)據(jù)庫的學(xué)習(xí),圓滿收官!!

http://www.risenshineclean.com/news/33264.html

相關(guān)文章:

  • 營銷型網(wǎng)站建設(shè)模板今日新聞頭條大事
  • 廣州市城鄉(xiāng)住房建設(shè)廳網(wǎng)站惠州百度seo找誰
  • 怎么設(shè)計一個自己的網(wǎng)站全網(wǎng)推廣平臺推薦
  • 電子商務(wù)網(wǎng)站開發(fā)平臺圖目前較好的crm系統(tǒng)
  • 網(wǎng)站開發(fā)有哪些職位中國十大流量網(wǎng)站
  • 哪些企業(yè)合適做網(wǎng)站核心關(guān)鍵詞舉例
  • 網(wǎng)站外鏈建設(shè)可以提升網(wǎng)站權(quán)重嗎網(wǎng)絡(luò)市場營銷策劃書
  • 網(wǎng)站域名hk南京百度推廣優(yōu)化排名
  • 自己設(shè)計一個網(wǎng)頁優(yōu)化關(guān)鍵詞的方法有哪些
  • 做網(wǎng)站設(shè)計需要什么軟件深圳在線制作網(wǎng)站
  • 楊浦做網(wǎng)站百度客服人工電話多少
  • 如何申請做網(wǎng)站編輯呢互聯(lián)網(wǎng)推廣怎么找客戶
  • brackets做的網(wǎng)站阿里巴巴官網(wǎng)首頁
  • 做網(wǎng)站能設(shè)置關(guān)鍵詞在百度中搜索到百度站長收錄入口
  • 手機web服務(wù)器西安搜索引擎優(yōu)化
  • 網(wǎng)站建站圖片網(wǎng)站流量排行
  • 炒域名 網(wǎng)站nba最新新聞新浪
  • 移動端下載百度搜索推廣優(yōu)化師工作內(nèi)容
  • 網(wǎng)站建設(shè)制作汕頭北京seo網(wǎng)站優(yōu)化培訓(xùn)
  • linux wordpress南京百度提升優(yōu)化
  • 做網(wǎng)站得花多少錢搜索引擎優(yōu)化包括
  • 課桌公司網(wǎng)站建設(shè)百度seo搜索引擎優(yōu)化
  • 前段模板的網(wǎng)站企業(yè)培訓(xùn)機構(gòu)
  • 攝影設(shè)計網(wǎng)站百度知道官網(wǎng)登錄入口
  • 做網(wǎng)站需注意事項湛江今日頭條新聞
  • 做彩妝網(wǎng)站的公司建站教程
  • 網(wǎng)站建設(shè)的招聘要求張家口網(wǎng)站seo
  • 什么軟件 做短視頻網(wǎng)站好北京百度推廣優(yōu)化排名
  • 高德地圖有外資背景嗎seo優(yōu)化技術(shù)廠家
  • 網(wǎng)站建設(shè)制作公司哪家打開百度網(wǎng)頁