当前位置:编程学习 > CGI >>

尝试用sql查询语句操纵普通文本数据库!使用简单的select就可以实现文本的索引访问,用update……

答案:use lib "."; # If NT,use lib "path-to-jtdb_directory";
use JTDB "1.01";
$main::split = ","; # Notice!, It's necessary! must be $main::split,
# Records split by ","
my $db = "<path-to>/dbname";
@main::recordNames = &db_connect($db); # Necessary! must be @main::recordNames,
# Get RecordNames from db-info file
my $sqlStr = "SELECT * FROM $db";
my @resoult = &executeStr($sqlStr);
my $line;
foreach $line (@resoult)
{
my $keys;
foreach $keys (keys %$line)
{
print $keys." : ".$line->{$keys}." ";
}
print "<br>\n";
}

---------------------------

用这样简单的方式操作文本数据,其实也不是难事儿,看看这个模块吧。。


http://ub4k91.chinaw3.com/download/jtdb.htm

JTDB v1.01


#-------------------------------------------------------------------
package JTDB;

# ----------------------------------------------------------------------
# 程序名称:平面文本SQL查询模块,JTDB V1.01
#
# 作者:阿恩 (Aren.Liu) / 成都金想网络技术有限公司
#
# 电话:028-4290153
#
# 传呼:96968-223046
#
# 一妹:boyaren@sina.com
#
# 主叶:http://www.justake.com     http://jtbbs.nt.souying.com
#
# -----------------------------------------------------------------------
# 版权所有 成都金想网络技术有限公司 来趣山庄
# Copyright (C) 2000 Justake.com, JinXiang Co.,Ltd. All Rights Reserved
# -----------------------------------------------------------------------
# V 1.01 2000/12/27
# 实现 create_db功能
# V 1.00 2000/12/26
# 设想并实现平面文本数据库SQL查询最基本功能
# 可实现 select,insert,delete,update 基本功能
# ------------------------------------------- 请保留以上版权 ------------

require 5.002;

use strict;
use vars qw(@ISA @EXPORT $VERSION);
use Exporter;

$VERSION = '1.01';
$main::txt = ".txt";

@ISA = qw(Exporter);

@EXPORT = qw
(
&db_connect
&create_db
&executeStr
&readtxtfile
&writetxtfile
);
#------------------------------------------------
sub create_db
{
    my ($jtdb,$recordNames) = @_;

    my $jtdb_info = $jtdb."_info".$main::txt;
    my $dbname = $jtdb.$main::txt;

    ¬ify("数据库已经存在,请选择其他数据库,数据库创建失败!",1) if (-e $dbname);

    open (JTDB,">$dbname");
    close(JTDB);

    open (JTDBINFO,">$jtdb_info");
    print JTDBINFO $recordNames."\n";
    close(JTDBINFO);

    return (1);
}
#------------------------------------------------
sub db_connect
{
    #my $dbname = substr($_[0],0,length($_[0])-4);
    my $dbname = $_[0];
    ¬ify("不能找到数据库信息文件,数据库连接失败!",1) if (!(-e $dbname."_info".$main::txt));
    my @jtdb_info = &readtxtfile($dbname."_info".$main::txt);
        chomp(@jtdb_info);
    ¬ify("数据库信息文件已经损坏或丢失,连接数据库失败!",1) if ($jtdb_info[0] eq "");

    my @keys = split(/$main::split/,$jtdb_info[0]);
    my $key;
    foreach $key (@keys)
    {
        $key =~ s/^\s+//g;
        $key =~ s/\s+$//g;
     }
    return @keys;
}
#------------------------------------------------
sub db_save
{
    my ($jtdb,@toSave) = @_;

    my $dbname = $jtdb.$main::txt;
    my $just = $jtdb.".lock";

    while(-f $just)
    {select(undef,undef,undef,0.1);} #锁文件
    open(LOCKFILE,">$just");

    open (FD,">$dbname");
    my $line;
    foreach $line (@toSave)
    {
        foreach (@main::recordNames)
        {
            print FD $line->{$_}.$main::split;
         }
         print FD "\n";
     }
    close(FD);

    close(LOCKFILE);
    unlink($just);
    return (1);
}
#------------------------------------------------
sub executeStr
{
    my @sqlcmds;
    my $sqlcmd;

    grep{/\s*(\S+)\s+(.*)/ and $sqlcmd = lc($1);} @_;

    if ($sqlcmd eq "select")
    {
        grep{/\s*(SELECT)\s+(\S+\s*(\s*\,+?\s*\S+)*)\s+FROM\s+(\S+)((\s+WHERE\s+(.*)\s*)*)/i and $sqlcmd = lc($1);@sqlcmds = ($2,$4,$7);} @_;
        &sql_select(@sqlcmds);
     }
    elsif ($sqlcmd eq "insert")
    {
        grep{/\s*(INSERT)\s+INTO\s+(\S+)((\s+\((\s*\S+\s*(\s*\,+?\s*\S+)*\s*)+?\))*?)\s+VALUES\s*\((.*)\)\s*/i and $sqlcmd = lc($1);@sqlcmds = ($2,$5,$7);} @_;
        &sql_insert(@sqlcmds);
     }
     elsif ($sqlcmd eq "delete")
     {
        grep{/\s*(DELETE)\s+FROM\s+(\S+)\s+WHERE\s+(.*)\s*/i and $sqlcmd = lc($1);@sqlcmds = ($2,$3);} @_;
        &sql_delete(@sqlcmds);
      }
      elsif ($sqlcmd eq "update")
      {
        grep{/\s*(UPDATE)\s+(\S+)\s+SET\s+(.*)\s+WHERE\s+(.*)\s*/i and $sqlcmd = lc($1);@sqlcmds = ($2,$3,$4);} @_;
        &sql_update(@sqlcmds);
       }
      else
      {¬ify("你输入的数据库操作语句不正确,或目前的版本尚未支持,请检查!");}
}
#------------------------------------------------
sub sql_update
{
    my ($jtdb,$set,$where) = @_;

    my @resoult = &executeStr("SELECT * FROM $jtdb");

    if ($where ne "")
    {
        my $key = '';
        foreach $key (@main::recordNames)
        {
            $where =~ s/$key/\$_->{'$key'}/ig;
         }
     }else {¬ify("你没有提供修改条件,请用 WHERE 语句提供!");}

    if ($set ne ""

上一个:perl连接access数据库
下一个:PERL与MySQL(三、DBI接口)

更多图片编程知识:
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,