1. 100分 Sqlite能不能訪問網路上的資料庫呀怎麼訪問
你好。
SQLITE是基於文件系統訪問的,你只能在PC是建立資料庫後以文件共享方式來讓其它用戶訪問。
通過文件共享倒是可以訪問,但是多個進程同時訪問,很容易出問題。
如果我的回答沒能幫助您,請繼續追問。
2. sqlite資料庫有啥用。資料庫是幹啥的
資料庫:按照數據結構來組織、存儲和管理數據的倉庫,通俗的講就是按照一定的結構來存儲數據的。
資料庫(database,DB):特點 長期存儲計算機內,有組織(具備一定的結構),可共享,數據集合。
sqlite:輕型的資料庫,可以直接嵌入某款應用中,佔用內存較小,滿足對數據的存儲,查詢需要。
3. 如何通過共享訪問sqlite資料庫 c
1. SQLite資料庫特點
(1)SQLite資料庫是開源的嵌入式資料庫,無需獨立的資料庫引擎,直接嵌入到應用程序進程中,因此,通過API,應用程序可以直接操作它。
(2)事務的處理是原子的,一致的,獨立的,可持久化的(ACID),即使在系統崩潰和掉電後。
(3)SQLite資料庫通過獨占性與共享鎖來實現事務的獨立處理。
(4)一個單獨的跨平台的磁碟文件就能夠存儲一個資料庫。
(5)能支持2TB級的數據。
(6)自包含,無外部依賴性。
(7)支持NULL,INTEGER,NUMERIC,REAL,TEXT和BLOG等數據類型。
(8)SQLite資料庫沒有用戶帳戶的概念。資料庫的許可權僅依賴於文件系統。
2. SQLite資料庫的基本操作
(1)建立資料庫
sqlite3 data.sqlite3
在當前目錄下建立了名為data.sqlite3的資料庫。
(2)建立數據表
create table call_list (id INTEGER PRIMARY KEY, type NUMERIC,telnum NUMERIC,bttime TEXT,tcount NUMERIC,charge_rate NUMERIC,charge_sum NUMERIC);
建立了名為 call_list的數據表,有7個欄位,分別為id,type,telnum,bttime,tcount,charge_sum.charge_rate.
(3)向數據表中插入數據
insert into call_list values ($num,1,2,'new',4,5,6);
(4)查詢數據表中的數據
select * from call_list;
(5)修改call_list表中的數據
update call_list set id=00001000 where id=10001;
(6)刪除表中的數據記錄
delete from call_list where id=1000;
(7)SQlite中的其它常用命令
.tables -列出所有的資料庫中的數據表
.schema tablename -列出指定數據表的結構
.quit -離開資料庫
(8)SQLite資料庫的導入與導出
a.將data.sqlite資料庫的數據全部導出:
sqlite3 data.sqlite
>.output dd.sql
>.mp
這樣,數據就保存在dd.sql的文件中,注意這個文件不是資料庫,而是SQL語句。
然後再把這些數據導入到另外一個資料庫data1.sqlite資料庫中。
sqlite3 data1.sqlite
>.read dd.sql
這樣,數據就從data.sqlite資料庫復制到data1.sqlite資料庫中去了。
b.將數據表中的數據導出到a.txt中去
.output a.txt //輸出重定向到a.txt
select * from call_list;
c.將導出的表中的數據導入到另一個資料庫的新建的表中去
如:當從data.sqlite中的call_list表中導出了數據,再導入到另外一個資料庫表call中去。
首先建立表call.
然後.import a.txt call 即可。
3. C語言操作Sqlite資料庫
API:
int sqlite3_open(const char* filename,sqlite3**ppdb);
第一個參數用來指定資料庫文件名。
第二個參數是一個資料庫標識符指針。
如果打開資料庫成功,則返回0,否則返回一個錯誤代碼。
int sqlite3_close(sqlite3*);
傳遞的參數是資料庫標識符指針用來關閉資料庫,操作成功是返回0,否則返回一個錯誤代碼。
int sqlite3_errcode(sqlite3*db);
const char* sqlite3_errmsg(sqlite3* db);
const char* sqlite3_errmsg16(sqlite3* db);
這三個函數都是返回錯誤信息,第一個函數返回的是最近調用資料庫介面的錯誤代碼,第二,第三個函數是返回最近調用資料庫介面的錯誤信息。第二個函數返回的錯誤信息是用UTF-8編碼的,第三個函數返回的錯誤信息是用UTF-16編碼的。
int sqlite3_exec(sqlite3*,const char*sql,int(*callback)(void*,int,char**,char**),void*,**errmsg);
這個函數非常重用,是用來執行SQLite資料庫的SQL語句的。
第一個參數是sqlite資料庫標識符指針。
第二個參數是要執行的SQL語句。
第三個參數是一個回調函數,在執行查詢操作時用到,其它的操作可以傳空值即NULL。
第四個參數是傳遞給回調函數第一個參數的實參。
第五個參數是一個錯誤信息。
回調函數: int callback(void*,int argc,char** argv,char** cname);
第一個參數是從sqlite3_exec傳遞過來的參數,可以為任意的類型。
第二個參數是查詢的列數。
第三個參數是查詢結果集的值。
第四個參數是列名。
int sqlite3_get_table(sqlite3*db,const char* sql,char***result,int *row,int*col,char** errmsg);
這個函數主要是用來查詢的。
第一個參數是資料庫描述符指針
第二個參數是SQL語句。
第三個參數是查詢的結果集。
第四個參數是結果集中的行數。
第五個參數是結果集中的列數。
第六個參數是錯誤信息。
它查詢出的行數是從欄位名開始的。即第0行是欄位名。
實例:
/**
本例主要實現用Sqlite的回調函數進行查詢
int sqlite3_exec(sqlite3*,const char* sql,int (*callback)(void*,int,char**,char**),void*,errmsg);
第一個參數是資料庫標識符
第二個參數是要執行的sql命令
第三個參數是回調函數
第四個參數是回調函數的第一個參數
第五個參數是用於指示錯誤信息
其中回調函數的形式:
int _sql_callback(void*arg,int argc,char**argv,char**cname);
第二個參數指示結果集中的列數
第三個參數是保存結果集的字元串
第四個參數是結果集中的列名
**/
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sqlite3.h>
#include <time.h>
int _call_back(void*arg,int argc,char** argv,char** cname);
int main(){
int res;
const char*dbfile="data.sqlite1";
char*errmsg=NULL;
sqlite3* db;
res=sqlite3_open(dbfile,&db);
if(res!=0){
perror("資料庫打開失敗");
exit(EXIT_FAILURE);
}
//創建一張數據表
const char* sqlcreate="create table call_list (id INTEGER PRIMARY KEY, type NUMERIC,telnum NUMERIC,bttime TEXT,tcount NUMERIC,charge_rate NUMERIC,charge_sum NUMERIC)";
res=sqlite3_exec(db,sqlcreate,NULL,NULL,&errmsg);
if(res!=0){
perror("建立數據表失敗");
exit(EXIT_FAILURE);
}
//插入100000條數據
int num=0;
struct timeval tv;
gettimeofday (&tv , NULL);
long old=tv.tv_sec;
while(num<100000){
const char* sqlinsert="insert into call_list values ($num,1,2,'new',4,5,6)";
res=sqlite3_exec(db,sqlinsert,NULL,NULL,&errmsg);//插入時不需要用到回調函數
if(res!=0){
perror("插入失敗");
exit(EXIT_FAILURE);
}
num++;
}
gettimeofday(&tv,NULL);
printf("插入100000條數據的時間為:%d秒/n",(tv.tv_sec-old));
//更新
const char* sqlupdate="update call_list set id=00001000 where id=10001";
res=sqlite3_exec(db,sqlupdate,NULL,NULL,&errmsg);
if(res!=0){
perror("更新數據失敗");
exit(EXIT_FAILURE);
}
//刪除
const char* sqldelete="delete from call_list where id=1000";
res=sqlite3_exec(db,sqldelete,NULL,NULL,&errmsg);
if(res!=0){
perror("刪除數據失敗");
exit(EXIT_FAILURE);
}
//查詢
const char* sqlquery="select * from call_list";
res=sqlite3_exec(db,sqlquery,&_call_back,NULL,&errmsg);
if(res!=0){
printf("%s/n",errmsg);
perror("執行失敗/n");
exit(EXIT_FAILURE);
}
res=sqlite3_close(db);
if(res!=0){
perror("資料庫關閉失敗");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
int _call_back(void* arg,int argc,char**argv,char**cname){
int i; //二重指針可以看成指針數組
for(i=0;i<argc;i++){
printf("%s=%s/n",cname[i],argv[i]);
}
return 0;
}
編譯與運行:
gcc -o sql sql.c -lsqlite3
可以看到:插入100000萬條數據,僅需要542秒。因此,SQLite資料庫非常的快。
總之,SQLite資料庫對於小型應用程序的開發是非常高效的,常用於手機(Android),PDA中。
4. 如何使用多線程同事訪問多個sqlite資料庫
SQLite作為一款小型的嵌入式資料庫,本身沒有提供復雜的鎖定機制,無法內部管理多路並發下的數據操作同步問題,更談不上優化,所以涉及到多路並發的情況,需要外部進行讀寫鎖控制,否則SQLite會返回SQLITE_BUSY錯誤,以駁回相關請求。
返回SQLITE_BUSY主要有以下幾種情況:
1。當有寫操作時,其他讀操作會被駁回
2。當有寫操作時,其他寫操作會被駁回
3。當開啟事務時,在提交事務之前,其他寫操作會被駁回
4。當開啟事務時,在提交事務之前,其他事務請求會被駁回
5。當有讀操作時,其他寫操作會被駁回
6。讀操作之間能夠並發執行
基於以上討論,可以看出這是一個典型的讀者寫者問題,讀操作要能夠共享,寫操作要互斥,讀寫之間也要互斥
可以設計如下的方案解決並發操作資料庫被鎖定的問題,同時保證讀操作能夠保持最大並發
1。採用互斥鎖控制資料庫寫操作
2。只有擁有互斥鎖的線程才能夠操作資料庫
3。寫操作必須獨立擁有互斥鎖
4。讀操作必須能夠共享互斥鎖,即在第一次讀取的時候獲取互斥鎖,最後一次讀取的時候釋放互斥鎖
5. android中怎樣共享sqlite資料庫
使用Contentprovider就能實現程序間共享資料庫和數據信息。
6. sqlite資料庫什麼時候用
如果是本地數據的需求用SQlite,如果像登陸有用驗證或者網路間共享數據的話,就需要調用WebService與後台伺服器數據交互,這兩種數據是沒有聯系的。一個是本地資料庫,一個是伺服器端資料庫。本地用資料庫就是SQlite,別的不太可能,終端沒有那麼高的性能,再說甲骨文公司也沒出手機端oracle啊。
如果你的數據是已知的,靜態的,沒有太多的變化,滿可以在本地SQlite中存儲、讀取。這樣不會因網路問題而降低效率和成功率。如果數據未知、有實時的變化或者有與其他用戶交互、共享的數據必然需要後台伺服器數據。
7. sqlite資料庫如何遠程連接
sqlite資料庫如何遠程連接代碼如下:
QSqlDatabase
db
=QSqlDatabase::addDatabase("QSQLITE");
db.setHostName("192.168.1.160");//設置你網路伺服器的IP
db.setDatabaseName("/share/personnel.db");//share共享目錄下的資料庫名
db.setUserName("PersionSql");//資料庫用戶名和密碼
db.setPassword("123456");
if
(!db.open())
qDebug()
<<
"Failed
to
connect
to
QSQLITE";
else
qDebug()
<<
"success!";
說明:訪問網路遠程資料庫則必須要關閉本機和遠程PC機上的防火牆,訪問的遠程資料庫的路徑不能為中文路徑
8. sqlite資料庫可以共享嗎
你說的共享是多個客戶端同時訪問么?sqlite是以整個資料庫為鎖防寫的。一次只能有一個客戶端寫入。
9. 什麼是 SQLITE 資料庫
SQLite是一款輕型的資料庫,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如Tcl、PHP、Java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源世界著名的資料庫管理系統來講,它的處理速度比他們都快。
SQLite雖然很小巧,但是支持的SQL語句不會遜色於其他開源資料庫,它支持的SQL包括:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
同時它還支持事務處理功能等等。也有人說它象Microsoft的Access,有時候真的覺得有點象,但是事實上它們區別很大。比如SQLite 支持跨平台,操作簡單,能夠使用很多語言直接創建資料庫,而不象Access一樣需要Office的支持。如果你是個很小型的應用,或者你想做嵌入式開發,沒有合適的資料庫系統,那麼現在你可以考慮使用SQLite。目前它的最新版本是 3.2.2,它的官方網站是:http://www.sqlite.org或者http://www.sqlite.com.cn,能在上面獲得源代碼和文檔。同時因為資料庫結構簡單,系統源代碼也不是很多,也適合想研究資料庫系統開發的專業人士。
10. SQlite 網路版
你好,我才用Sqlite和朋友做了一個小系統,感覺還是滿可以的,你可以開一台電腦,作為伺服器,把你的Sqlite文件放上去,映射出來,那麼大家共用想當方便,也不會產生什麼異常,注意一點,你們最好在共享一個資料庫更改的日誌文件,當有人更改了資料庫時,然後就更新上去,那樣別人使用的時候也能隨時,根據需要,更新或重寫自己的代碼