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文件放上去,映射出来,那么大家共用想当方便,也不会产生什么异常,注意一点,你们最好在共享一个数据库更改的日志文件,当有人更改了数据库时,然后就更新上去,那样别人使用的时候也能随时,根据需要,更新或重写自己的代码