`
haoningabc
  • 浏览: 1449391 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sqlite远程连接示例

    博客分类:
  • sql
阅读更多


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();  


转http://www.cnitblog.com/gyn/archive/2011/01/15/20463.html
分享到:
评论

相关推荐

    jyugem gem-0.3.1

    要将连接的 CONTROL 状态更改为在线远程,请执行以下操作: sqlite&gt; 更新 G_VARIABLE 设置 INIT_VAL=5 其中 SVC_NAME='ControlStateSystemDefault'; 也可以通过修改 Python 脚本来更改 CONTROL 状态。 在gem.py中...

    VB操作远程mysql数据库源码

    目前比较流行的数据库有很多,如大型的Oracel数据库,SQL Server数据库,以及中小型的Access数据库,MySQL数据库和SQLite数据库。LabVIEW都能够跟上述的数据库进行连接和访问,只是需要进行不同的设置,以及安装不同...

    ros-example:ROS软件包的完整示例-C ++

    伟大的C ++ Ros示例ROS软件包的完整示例-C ++入门该存储库希望以一种实用的方法来探索中间件ROS(机器人操作系统)中的范例,同时将ROS与外部功能连接起来。 它包含探索ROS组件的不同软件包: 话题服务外部ROS 该...

    guacozy:基于舒适鳄梨调味酱的远程访问解决方案

    番石榴Guacozy是基于HTML5浏览器的基于技术的VNC / RDP / SSH远程连接管理器链接Docker映像演示版影片示范: 截屏:怎么跑guacd服务器要连接到远程服务器(RDP / SSH / VNC),您需要guacd服务。 如果您已经在使用...

    k8s-sample:Kubernetes (K8S) 示例应用程序

    该项目为您提供整个生命周期:连接和引导运行时环境、在本地构建和运行应用程序、将应用程序构建到容器中以及将容器部署到运行时环境中。 在客户端,这一切只需要一个普通的 Linux/amd64 系统(例如 )并安装和程序...

    saqua:简单的Android队列(对异步有用)

    如果网络连接不稳定,它可以帮助与远程服务器执行异步交换。 命名 最初是saqua ,是Endmond Hamilton的宇宙歌剧“ The Star Kings”中的花式酒精饮料。 “被诅咒的好饮料!” 正如主要人物所说的那样。 所以,为...

    Android开发案例驱动教程 配套代码

    《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,...17.3.7 管理连接 476 17.3.8 互相之间的通信 480 17.4 WiFi通信 484 17.4.1 管理WiFi 484 17.4.2 扫描热点 487 17.4.3 Socket通信 489

    FUXA:基于Web的过程可视化(SCADAHMIDashboard)软件

    通过Modbus RTU / TCP,Siemens S7协议,OPC-UA,BACnet IP进行设备连接 SCADA / HMI Web编辑器-完全基于网络的工程和设计 跨平台全栈-带有NodeJ的后端和带有Web技术(HTML5,CSS,Javascript,Angular,SVG)的前端...

    android开发资料大全

    Android 之 AIDL 和远程 Service 调用 Android 相对布局技巧 android开发环境之Logcat(日志)教程实例汇总 android网络通信之socket教程实例汇总 AsyncTask进度条加载网站数据到ListView 命令行开发、编译、打包...

    python数据分析随书代码

    8.1 基于sqlite3的轻量级访问 181 8.2 通过pandas访问数据库 183 8.3 SQLAlchemy 185 8.3.1 SQLAlchemy的安装和配置 186 8.3.2 通过SQLAlchemy填充数据库 188 8.3.3 通过SQLAlchemy查询数据库 189 8.4 Pony ...

    vc++ 应用源码包_1

    《远程控制编程技术》源代码 内含(重启、图片操作、ip操作、键盘与鼠标、客户端以及服务端、文件传输等实例源码) 多个VC++加密解密算法库(CRYPT++) 详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法...

    vc++ 应用源码包_2

    《远程控制编程技术》源代码 内含(重启、图片操作、ip操作、键盘与鼠标、客户端以及服务端、文件传输等实例源码) 多个VC++加密解密算法库(CRYPT++) 详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法...

    vc++ 应用源码包_6

    《远程控制编程技术》源代码 内含(重启、图片操作、ip操作、键盘与鼠标、客户端以及服务端、文件传输等实例源码) 多个VC++加密解密算法库(CRYPT++) 详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法...

    vc++ 应用源码包_5

    《远程控制编程技术》源代码 内含(重启、图片操作、ip操作、键盘与鼠标、客户端以及服务端、文件传输等实例源码) 多个VC++加密解密算法库(CRYPT++) 详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法...

    vc++ 开发实例源码包

    《远程控制编程技术》源代码 内含(重启、图片操作、ip操作、键盘与鼠标、客户端以及服务端、文件传输等实例源码) 多个VC++加密解密算法库(CRYPT++) 详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法...

    vc++ 应用源码包_3

    《远程控制编程技术》源代码 内含(重启、图片操作、ip操作、键盘与鼠标、客户端以及服务端、文件传输等实例源码) 多个VC++加密解密算法库(CRYPT++) 详细讲解了Crypt++的加密解密的使用以及其它的加密解密方法...

    asp.net知识库

    Using sqlite with .NET Visual Studio 2005 中的新 DataSet 特性 MySQL 和 .Net2.0配合使用 与DotNet数据对象结合的自定义数据对象设计 (二) 数据集合与DataTable 与DotNet数据对象结合的自定义数据对象设计 (一) ...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 ...• SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...

    Python基础教程(第3版)-201802出版-文字版

    久负盛名的 Python 入门经典针对 Python 3 全新升级十个出色的项目,让你尽快可以使用 Python 解决实际问题目录第 1章 快速上手:基础知识 ........................ 1 1.1 交互式解释器 .............................

Global site tag (gtag.js) - Google Analytics