perl+SQlite模块


在开发处理大量的数据,且数据随机性超强悍(比如网络数据)的系统时,我们总会面临对数据正性的验证的问题,

尤其是当这些系统并非基于数据库、但又具有大量的条件查询的时候,我们常常需要要原始的数据进行统计,再通
过与系统中的值进行比较,来难数据的正确性,但可条件的灵活,以至手工的计算是苦不堪言的,大家还是喜欢将数据
导入到数据库系统中再用SQL语句来验证数据的正确性。

下面这段代码是为了将几个数据文件读入到SQLITE中,并创建相应的数据库文件。当在测试系统中,用户的权限受
限的时候,需要将perl相关的一些库放到自己的目录下面。
比如我的目录如下:

dongq@DongQ_Lap ~/workspace/test/perl $ tree imp_exp/

imp_exp
|-- DBD            ---请自己编译sqlite的perl库代码,然后将目录拷贝过来
|   |-- SQLite.pm
|   `-- getsqlite.pl
|-- auto           ---请自己编译sqlite的perl库代码,然后将目录拷贝过来
|   `-- DBD
|       `-- SQLite
|           |-- SQLite.bs
|           `-- SQLite.so
|-- createdb.pl           ---自己的脚本代码
|-- dbitrace.log
|-- do.clear
|-- dump.db               --生成的数据库文件
`-- test.dat                 --导入的数据


4 directories, 9 files
dongq@DongQ_Lap ~/workspace/test/perl $ 


下面的数据那入的perl代码
#!/usr/bin/env perl
#***************************************
# createdb.pl dump1.txt dump2.txt
#***************************************
use DBI;
use strict;
use lib qw( ./. );	#说明库的位置
die "Usage: ./createdb.pl dump1.txt dump2.txt ..." unless $#ARGV >= 0;


#建立数据库连接
my $dbh = DBI->connect( "dbi:SQLite:dbname=./dump.db" );
#创建数据表
my $create_sth = $dbh->do( "CREATE TABLE arp_record(
							ar_hrd INTEGER,
							ar_pro INTEGER,
							ar_hln INTEGER,
							ar_pln INTEGER,
							ar_op INTEGER,
							ar_sha VARCHAR(17),
							ar_spa INTEGER,
							ar_tha VARCHAR(17),
							ar_tpa INTEGER )" );


#创建索引
my $index_sth = $dbh->do( "CREATE INDEX idx_ar_sha ON arp_record( ar_sha )" );
$index_sth = $dbh->do( "CREATE INDEX idx_ar_spa ON arp_record( ar_spa )" );
$index_sth = $dbh->do( "CREATE INDEX idx_ar_tha ON arp_record( ar_tha )" );
$index_sth = $dbh->do( "CREATE INDEX idx_ar_tpa ON arp_record( ar_tpa )" );


#插入数据
my $insert_sth = $dbh->prepare( q{ INSERT INTO arp_record VALUES( ?, ?, ?, ?, ?, ?, ?, ?, ? ) } );


#详细的调试信息
DBI->trace( 1, 'dbitrace.log');


$dbh->{ AutoCommit } = 0;


my $input_name;
foreach $input_name (@ARGV)
{
	open ( CSV, "<$input_name" ) or die "Can't open file: $!";


	while( <CSV> )
	{
		chomp;
		my( $ar_hrd, $ar_pro, $ar_hln, $ar_pln, $ar_op, $ar_sha, $ar_spa, $ar_tha, $ar_tpa ) = split /,/;
			
		$insert_sth->bind_param( 1, $ar_hrd );
		$insert_sth->bind_param( 2, $ar_pro );
		$insert_sth->bind_param( 3, $ar_hln );
		$insert_sth->bind_param( 4, $ar_pln );
		$insert_sth->bind_param( 5, $ar_op );
		$insert_sth->bind_param( 6, $dbh->quote( $ar_sha ) );
		$insert_sth->bind_param( 7, $ar_spa );
		$insert_sth->bind_param( 8, $dbh->quote( $ar_tha) );
		$insert_sth->bind_param( 9, $ar_tpa );
		$insert_sth->execute or die $dbh->errstr;
	}


}

$dbh->commit or die $dbh->errstr;

close ( CSV );
$dbh->disconnect;

exit;

呵呵,像上面的这种例子网上到处都是:)
参考: <<perl DBI 编程>>一书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值