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
分享到:
相关推荐
在本示例中,SQLite可能用于存储和管理应用程序的数据,例如用户信息、设置或业务逻辑所需的任何其他结构化信息。 【gSOAP】:gSOAP是开源的C和C++ SOAP(简单对象访问协议)工具包,用于构建Web服务和客户端应用...
本教程将探讨如何在Android应用中实现远程连接到MySQL数据库。标题"android远程连接MYSQL数据库"暗示了我们将讨论这一关键技能。 首先,我们要知道Android系统本身并不支持直接连接到MySQL数据库,因为Android设备...
### QT3连接SQLite知识点详解 #### 一、SQLite简介与安装 SQLite是一种轻量级的嵌入式数据库引擎,常用于各种操作系统环境下的应用程序中,包括但不限于Linux、Windows等平台。由于其简单易用且无需独立服务器进程...
1. **网络服务器**:这是一个进程或服务,负责监听网络连接,解析接收到的SQLite命令,执行这些命令,并将结果返回给客户端。它可能还包含安全措施,如身份验证和加密,以保护数据的安全。 2. **客户端库**:为...
本示例将详细介绍如何使用Firefox的SQLite Manager工具来管理和操作SQLite数据库,这对于iOS开发者来说是一项实用技能。 首先,SQLite Manager是一款强大的开源工具,它允许用户直观地创建、编辑和管理SQLite数据库...
3. 高性能:由于SQLite是内置于应用程序中的,数据访问速度通常快于通过网络连接的远程数据库。 4. ACID特性:SQLite保证了事务的原子性、一致性、隔离性和持久性,确保数据安全。 5. SQL支持:SQLite遵循SQL标准,...
引用SQLite后,可以使用以下代码来创建数据库连接和执行SQL语句: ```csharp using System.Data.SQLite; SQLiteConnection conn = new SQLiteConnection("Data Source=myDatabase.db;Version=3;"); conn.Open...
- 如题目示例所示,可以使用`SQLSTRINGCONNECT`函数来构建连接字符串。例如: ```foxpro con=SQLSTRINGCONNECT('driver=sqlserver;server=diaorp;uid=sa;pwd=sa;database=lg') ``` 其中,`driver=sqlserver`表示...
本示例关注的是如何利用SQLite来存储带有照片的联系人管理信息,这涉及到对BINARY类型字段的理解和操作。 首先,我们需要理解SQLite的数据类型。SQLite支持多种数据类型,包括NULL、INTEGER、REAL、TEXT和BLOB。在...
"dba"可能是这个压缩包中的主要文件,它可能是一个包含SQLite数据库连接和操作功能的AS3类库或者是一个示例数据库文件。 在实际开发中,以下是一些关键知识点: 1. **SQLite AS3库集成**:将SQLite AS3库导入Flex...
这使得在没有网络连接的情况下也能处理地理空间数据,特别适合于移动应用或者在远程地区运行的应用。 总结来说,本项目展示了如何在Java后台的SpringBoot应用中,利用Spatialite扩展SQLite数据库,以处理离线矢量...
本教程将探讨如何在Android应用中使用JDBC(Java Database Connectivity)来连接并操作远程MySQL数据库,实现增删查改的基本功能。 首先,Android本身并不支持直接通过JDBC连接MySQL,因为Android的Java环境与标准...
然而,有时候开发者可能需要在Android应用中连接到远程的SQL Server 2008数据库,以便进行更复杂的操作或者数据同步。在这样的场景下,`jdts.jar`库提供了一个解决方案。 `jdts.jar` 是Java Data Transfer Objects ...
本压缩包中的"一个连接MySQL数据库的安卓工程源码"提供了一个示例,展示了如何在Android应用中与远程MySQL数据库进行交互。 首先,我们要明确的是,SQLite数据库主要用于本地数据存储,而MySQL是服务器端的数据库,...
在Android开发中,连接远程数据库是一项常见的任务,它允许应用程序从服务器获取或存储数据,实现数据的同步。这里我们将深入探讨如何在Android中实现这一功能,以及涉及的相关知识点。 首先,我们要了解Android与...
提供的"TableDemo"可能是一个iOS应用示例,展示了如何在UITableView中展示SQLite数据库中的数据。UITableView是iOS中常用的视图组件,用于显示列表数据。开发者通常会创建一个数据源类,该类遵循`...
数据库连接示例** 在描述中提到的"DataBaseDemo"可能是包含数据库操作的示例代码。这个项目可能包括以下部分: - `DBHelper.java`: 继承自`SQLiteOpenHelper`的类,用于创建和升级数据库。 - `MainActivity.java`: ...
【标题】"android-sqlite-mysql-sync-example-master" 是一个Android项目,专注于演示如何在SQLite(本地数据库)和MySQL(远程服务器数据库)之间进行数据同步。SQLite是Android设备上常用的轻量级数据库,而MySQL...
在`sqloffline`中,我们可能看到如何在没有网络连接的情况下读写数据,并在重新联接网络时同步数据到远程服务器。这通常涉及到事务处理和错误处理机制,确保数据的一致性和完整性。 3. **rectangle**: `rectangle...
`esp32_arduino_sqlite3_lib`库的使用意味着开发者可以利用SQL语言在ESP32上创建、查询和管理数据库,无需依赖远程服务器或云服务,从而提高数据处理的效率和隐私性。这个库将SQLite3的C接口封装成易于理解和使用的...