sqlite远程连接示例
Sqlite 是一个只有几百 k 大小的、 优秀的嵌入式数据库,本身不带有远程连接的功能。由于其身材小,速度快并且为众多的语言支持,所以在单机领域得到了广泛的使用。但由于天然不支持服务 / 客户端的模式,使其在遇到小型规模数据库远程连接的情况时不得不借助于附加的编程。
单位有三百多人,作为网管每天要接到很多电话,有很多一时无法想起对应的名字,翻查通讯录不仅速度慢而且容易漏过。为了方便起见,在 sqlite 上建立了一个通讯录数据表,然后用 perl 编写了一个查询脚本。效果不错的同时,也有同事希望可以得到一份拷贝。但是这时遇到一个问题,如何保证通讯录在不同人手中保持版本的统一性。最好的办法是建立一个服务 / 客户端的模式,在本机上维护一个数据库,而其它人通过连接数据库得到相关的查询结果。
具体的解决方法是这样的:在本机上维护一个到 sqlite 数据库的连接并建立一个来自于客户端的 socket 的监听,接受远程查询条件并回复查询结果;客户端志负责发送和接受这些最简单的任务。
客户端的代码:
use strictmy $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()
一、服务器端设置
1、登陆SQL Server(windows身份认证),登陆后右击,选择“属性”。
2左侧选择“安全性”,选中右侧的“SQL Server 和 Windows 身份验证模式”以启用混合登录模式。
3、选择“连接”,勾选“允许远程连接此服务器”,建议将“最大并发连接数”按实际情况,进行设置,然后点“确定”。
4、展开“安全性”->“登录名”->“sa”,右键选择“属性”。
5、左侧选择“常规”,右侧选择“SQL Server 身份验证”,并设置密码。
6、选择“状态”,选中“启用”,点击“确定”。
7、右击数据库选择“方面”。
8、在“方面”下接列表框中,选择“服务器配置,“RemoteAccessEnabled”属性和”RemotoDacEnabled”设为“True”,点“确定”。至此SSMS已设置完毕,先退出,再用sa登录,成功即表示sa帐户已经启用。
9、下面开始配置Sql Server Configuration Manager (SSCM),选中左侧的“SQL Server服务”,确保右侧的“SQL Server”以及SQL Server Browser正在运行。
10、打开左侧“SqlServer网络配置”,打开“你自己数据库实例名的协议”,查看右侧的TCP/IP默认是“已禁用”,将其修改为“已启用”。
11、双击打开“TCP/IP”查看“TCP/IP属性”下“协议”选项卡中的“全部侦听”和“已启用”项,是否都是设置成“是”。
12、选择“IP Addersses”选项卡,IP1、IP2、IPAll设置TCP端口为“1433”,TCP动态端口为空值,已启用为“是”。
13、将"客户端协议"的"TCP/IP"也修改为“已启用”。
14、双击打开右侧“TCP/IP”,打开“TCP/IP属性”,将默认端口设为“1433”,已启用为“是”。配置完成,重新启动SQL Server 2008。
15、必需要防火墙上把SQL Server 的1433 TCP端口和1434 UDP端口映射出去。
二、客户端
1、登录SQL输入服务器IP和端口号 如:192.168.1.10:8009
2、使用sqlserver验证模式,输入账号密码
3、登录
-----------望采纳-----------
er】远程访问数据库进行配置
团队间开发,需要使用同一个数据库服务器,所以大家必须都可以使用IP地址来访问数据库。
通常访问数据库的方式,有三种
1、直接访问本地数据库,在服务器名称里,输入“ . " ,这个圆点。
2、直接访问本地数据库,在服务器名称里,输入本机名称
3、在本地或者在远端进行访问,在服务器名称里输入,SqlServer数据库所在电脑的IP地址。但需要一些配置。
配置步骤如下:
①给带有SQLServer的电脑配置ip地址
②关闭防火墙:控制面板→防火墙
③打开SQLServer配置管理工具
打开后将图中项目,(tcp/ip和Named Pipes)设为启动状态
双击Tcp/IP配置ip地址
④在SQLServer上,设置允许远程访问:在sa上右击,选择属性
⑤设置验证方式
右击数据库实例→点击属性→点击安全
设置为SQLServer和windows认证即可
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)