客户端怎么读取sqlite数据库

时间:2022-09-12 21:30:26
               大体是服务器---客户端这种交互模式,sqlite在服务器上,客户端要读取或存储服务器上sqlite的数据。想要做的效果是客户端和服务器都是一个安装包,直接安装就可以使用。
        像webservice这种模式不合适,因为还要配置iis。想问一个还有没有其它方法或技术可以实现?

15 个解决方案

#1


有点异想天开吧
你见到有任何其他软件是这么干的?

你安装包如何知道服务器在哪,又如何从客户端远程给服务器安装软件?

#2


可以尝试自己做软件打包,安装,然后像oracle9i那样,同一个安装包里,可以选服务端,也可以选客户端
不过从10g开始,oracle也不那么干了,而是服务端和客户端分开
毕竟服务端还分32位和64位,客户端也分32位和64位
我就是想安装个32位客户端而已,有什么必要连32+64服务端+64客户端也copy一份到硬盘上安装??

#3


用socket交互就是了。

#4


不想用webservice,自己写WCF,或者就简单的winform服务程序,socket收发字符串和字节数组
但是想客户端和服务端打成一个包,有点不现实吧

#5


主题是:客户端怎么读取sqlite数据库 

估计有人建议你用webservice实现,本地不写ado那些东西. 

如果用ado, 数据库路径问题而已啊

#6


不能用webservice就用socket咯,代码更多一点而已。

#7



B/S模式的服务器端可以使用sqlite。
C/S模式服务器端建议用其他数据库,MySql也不错,短小精悍,客户端用sqlite操作一些本地配置吧 客户端怎么读取sqlite数据库

#8


   
引用 1 楼 Z65443344 的回复:
有点异想天开吧
你见到有任何其他软件是这么干的?

你安装包如何知道服务器在哪,又如何从客户端远程给服务器安装软件?

            -------------------服务器和客户端都在同一个局域网,只要在客户端配置服务器的IP就可以了吧,我现在想实现的功能是服务器端不用配置iis,我现在也了解了.net remoting是自定义宿主,不用依赖iis,如果用socket 方式我觉得会比较复杂。

#9


我是在回答你,服务端和客户端都打到一个包里的问题
如果用socket,当然就完全脱离了iis

#10


引用 7 楼 xiangxinzijiwonen 的回复:
B/S模式的服务器端可以使用sqlite。
C/S模式服务器端建议用其他数据库,MySql也不错,短小精悍,客户端用sqlite操作一些本地配置吧 客户端怎么读取sqlite数据库

------------------------------我现在选用sqlite的用意就是不用安装数据库

#11


Sqlite类似于access,是个数据文件,桌面型数据库,不能远程连接。
局域网内可以把其目录共享,设置读写权限。
具体的解决方法是这样的:在本机上维护一个到 sqlite 数据库的连接并建立一个来自于客户端的 socket 的监听,接受远程查询条件并回复查询结果;客户端志负责发送和接受这些最简单的任务。

#12


目前可以给你参考一段Perl的代码
客户端:

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

#13


引用 5 楼 xtdhb 的回复:
主题是:客户端怎么读取sqlite数据库 

估计有人建议你用webservice实现,本地不写ado那些东西. 

如果用ado, 数据库路径问题而已啊

------------------------------客户端读取sqlite是经过服务器来完成(操作数据库由服务器来完成),服务器再把结果返回给客户端。

#14


引用 11 楼 gdf87521 的回复:
Sqlite类似于access,是个数据文件,桌面型数据库,不能远程连接。
局域网内可以把其目录共享,设置读写权限。
具体的解决方法是这样的:在本机上维护一个到 sqlite 数据库的连接并建立一个来自于客户端的 socket 的监听,接受远程查询条件并回复查询结果;客户端志负责发送和接受这些最简单的任务。



--------------------------------我现在就是access数据库,客户端访问服务器端的数据库也是如你说通过共享的方法。
但是现在遇到的问题 1 是要服务器要配置access共享的问题(不同操作系统配置共享都不一样,对客户来说是事难事),2 就是要安装access数据访问数据源驱动。这些在对客户来说都是很难的事,所以想做成直接安装就可以使用。
所在现在想改成sqlite数据库,不用安装数据库驱动程序。

#15


引用 4 楼 Z65443344 的回复:
不想用webservice,自己写WCF,或者就简单的winform服务程序,socket收发字符串和字节数组
但是想客户端和服务端打成一个包,有点不现实吧



     ----------------------------------
     是服务器和客户分别打包;如果客户端想查询报表之类功能用socket我觉得过于复杂。我现在想到的方法是.net remoting,因为它可以实现远程调用,也可以不用依赖iis服务,可以自定义服务器。

#1


有点异想天开吧
你见到有任何其他软件是这么干的?

你安装包如何知道服务器在哪,又如何从客户端远程给服务器安装软件?

#2


可以尝试自己做软件打包,安装,然后像oracle9i那样,同一个安装包里,可以选服务端,也可以选客户端
不过从10g开始,oracle也不那么干了,而是服务端和客户端分开
毕竟服务端还分32位和64位,客户端也分32位和64位
我就是想安装个32位客户端而已,有什么必要连32+64服务端+64客户端也copy一份到硬盘上安装??

#3


用socket交互就是了。

#4


不想用webservice,自己写WCF,或者就简单的winform服务程序,socket收发字符串和字节数组
但是想客户端和服务端打成一个包,有点不现实吧

#5


主题是:客户端怎么读取sqlite数据库 

估计有人建议你用webservice实现,本地不写ado那些东西. 

如果用ado, 数据库路径问题而已啊

#6


不能用webservice就用socket咯,代码更多一点而已。

#7



B/S模式的服务器端可以使用sqlite。
C/S模式服务器端建议用其他数据库,MySql也不错,短小精悍,客户端用sqlite操作一些本地配置吧 客户端怎么读取sqlite数据库

#8


   
引用 1 楼 Z65443344 的回复:
有点异想天开吧
你见到有任何其他软件是这么干的?

你安装包如何知道服务器在哪,又如何从客户端远程给服务器安装软件?

            -------------------服务器和客户端都在同一个局域网,只要在客户端配置服务器的IP就可以了吧,我现在想实现的功能是服务器端不用配置iis,我现在也了解了.net remoting是自定义宿主,不用依赖iis,如果用socket 方式我觉得会比较复杂。

#9


我是在回答你,服务端和客户端都打到一个包里的问题
如果用socket,当然就完全脱离了iis

#10


引用 7 楼 xiangxinzijiwonen 的回复:
B/S模式的服务器端可以使用sqlite。
C/S模式服务器端建议用其他数据库,MySql也不错,短小精悍,客户端用sqlite操作一些本地配置吧 客户端怎么读取sqlite数据库

------------------------------我现在选用sqlite的用意就是不用安装数据库

#11


Sqlite类似于access,是个数据文件,桌面型数据库,不能远程连接。
局域网内可以把其目录共享,设置读写权限。
具体的解决方法是这样的:在本机上维护一个到 sqlite 数据库的连接并建立一个来自于客户端的 socket 的监听,接受远程查询条件并回复查询结果;客户端志负责发送和接受这些最简单的任务。

#12


目前可以给你参考一段Perl的代码
客户端:

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

#13


引用 5 楼 xtdhb 的回复:
主题是:客户端怎么读取sqlite数据库 

估计有人建议你用webservice实现,本地不写ado那些东西. 

如果用ado, 数据库路径问题而已啊

------------------------------客户端读取sqlite是经过服务器来完成(操作数据库由服务器来完成),服务器再把结果返回给客户端。

#14


引用 11 楼 gdf87521 的回复:
Sqlite类似于access,是个数据文件,桌面型数据库,不能远程连接。
局域网内可以把其目录共享,设置读写权限。
具体的解决方法是这样的:在本机上维护一个到 sqlite 数据库的连接并建立一个来自于客户端的 socket 的监听,接受远程查询条件并回复查询结果;客户端志负责发送和接受这些最简单的任务。



--------------------------------我现在就是access数据库,客户端访问服务器端的数据库也是如你说通过共享的方法。
但是现在遇到的问题 1 是要服务器要配置access共享的问题(不同操作系统配置共享都不一样,对客户来说是事难事),2 就是要安装access数据访问数据源驱动。这些在对客户来说都是很难的事,所以想做成直接安装就可以使用。
所在现在想改成sqlite数据库,不用安装数据库驱动程序。

#15


引用 4 楼 Z65443344 的回复:
不想用webservice,自己写WCF,或者就简单的winform服务程序,socket收发字符串和字节数组
但是想客户端和服务端打成一个包,有点不现实吧



     ----------------------------------
     是服务器和客户分别打包;如果客户端想查询报表之类功能用socket我觉得过于复杂。我现在想到的方法是.net remoting,因为它可以实现远程调用,也可以不用依赖iis服务,可以自定义服务器。