2个回答
展开全部
sqlite远程连接示例
Sqlite 是一个只有几百 k 大小的、 优秀的嵌入式数据库,本身不带有远程连接的功能。由于其身材小,速度快并且为众多的语言支持,所以在单机领域得到了广泛的使用。但由于天然不支持服务 / 客户端的模式,使其在遇到小型规模数据库远程连接的情况时不得不借助于附加的编程。
单位有三百多人,作为网管每天要接到很多电话,有很多一时无法想起对应的名字,翻查通讯录不仅速度慢而且容易漏过。为了方便起见,在 sqlite 上建立了一个通讯录数据表,然后用 perl 编写了一个查询脚本。效果不错的同时,也有同事希望可以得到一份拷贝。但是这时遇到一个问题,如何保证通讯录在不同人手中保持版本的统一性。最好的办法是建立一个服务 / 客户端的模式,在本机上维护一个数据库,而其它人通过连接数据库得到相关的查询结果。
具体的解决方法是这样的:在本机上维护一个到 sqlite 数据库的连接并建立一个来自于客户端的 socket 的监听,接受远程查询条件并回复查询结果;客户端志负责发送和接受这些最简单的任务。
客户端的代码:
use strict;
my $in_buffer = undef;
my $PF_INET = 2;
my $port = 2345;
my $remote_addr = pack('SnC4x8',$PF_INET,$port,192,168,138,228);
my $SOCK_DGRAM = 2;
socket(UDP_CLIENT, $PF_INET, $SOCK_DGRAM, getprotobyname('udp'));
while(1){
print(" 输入名字或号码: ");
my $out_buffer=<STDIN>;
chomp($out_buffer);
if($out_buffer eq "exit"){last;}
send(UDP_CLIENT, $out_buffer, 0, $remote_addr);
print("waiting for reply...\n");
recv(UDP_CLIENT, $in_buffer, 100, 0);
chomp($in_buffer);
print("$in_buffer\n");
}
close(UDP_CLIENT);
服务器端的代码:
BEGIN{
if( $^O eq 'MSWin32' ){
require Win32::Console;
Win32::Console::Free();
}
}
use strict;
use DBI;
#database parameters
my $db_path = 'd:/src/cc/phones.db';
my $dbh = DBI->connect("dbi:SQLite:$db_path", {PrintError => 0}) or die $DBI::errstr;
my $sth = undef;
#socket server parameters
my $in_buffer = undef;
my $out_buffer = undef;
my $PF_INET = 2;
my $port = 2345;
my $local_addr = pack('SnC4x8',$PF_INET,$port,192,168,138,228);
my $SOCK_DGRAM = 2;
socket(UDP_SERVER, $PF_INET,$SOCK_DGRAM, getprotobyname('udp')) or die("$!");
bind(UDP_SERVER, $local_addr) or die("$!");
listen(UDP_SERVER, 10);
while(1){
#receive query then send result
last unless my $remote_addr = recv(UDP_SERVER,$in_buffer,100,0);
chomp($in_buffer);
if($in_buffer =~ /^[0-9]{6}$/){
$sth = $dbh->prepare("select * from phones where number = $in_buffer");
PROCEDURE:
$sth->execute();
my @items = $sth->fetchrow_array();
if(scalar(@items)){
$out_buffer = $items[0].' 的虚拟网号码是 '.$items[1];
}else{
$out_buffer = ' 查无此人 ';
}
}else{
$sth = $dbh->prepare("select * from phones where name = '$in_buffer'");
goto PROCEDURE;
}
send(UDP_SERVER,$out_buffer,0,$remote_addr);
}
#disconnect from sqlite
$dbh->disconnect();
Storm代理
2023-07-25 广告
2023-07-25 广告
StormProxies是一家国内优质海外HTTP代理商,拥有一个庞大的IP资源池,覆盖200多个地区,IP数量大且匿名度高。其优点还包括超高并发、稳定高效、技术服务等特点,同时提供HTTP、HTTPS以及SOCKS5协议支持。此外,Sto...
点击进入详情页
本回答由Storm代理提供
2016-01-06 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
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机上的防火墙,访问的远程数据库的路径不能为中文路径
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机上的防火墙,访问的远程数据库的路径不能为中文路径
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |