Perl实现文件及数据库访问
写了一个perl脚本,使用了循环、控制台输出、访问文件以及访问数据库等特性,实现从文本文件中,读入多条已格式化的记录,按规定的分隔符解析,并插入到mysql数据库中。一、预备条件:
0、安装perl解释器(废话);
1、安装有数据库(本人使用的是mysql);
2、perl已安装DBI模块。(注意:使用访问数据库功能时,须先安装相应的模块,即DBI模块,安装方法如链接所示:http://www.cnblogs.com/itech/archive/2009/08/10/1542832.html)
二、准备工作:
1、新建文本文件 test.log,perl将会从此文件读取数据,并插入数据库。其内容为:
引用
20120507|192.168.10.1|50
20131222|172.18.33.55|24
20130706|202.116.60.5|61
2、在mysql中新建数据表,从文本文件读来数据将会插入此表。脚本内容为:
create database testdb;
use testdb;
create table test(createtime datetime not null default '19000101', ipaddr varchar(20) not null default '', counter int not null default 0);
三、perl脚本代码:
#!/usr/bin/perl
use DBI;
#use DBD::mysql;
my $maillog = "./test.log";
my ($dataSoureName) = "DBI:mysql:test:localhost";#data source name
my ($userName) = "root";# user name
my ($password) = "";# password
my ($dbh, $sth);#database and statement handles
my $dbh = DBI->connect($dataSoureName, $userName, $password, {'RaiseError'=>1});
open(FF, $maillog) || die "ERROR:$!";
while(<FF>) {
my($createtime,$ipaddr,$counter) = (split /\|/, $_);
&insert_test($createtime, $ipaddr, $counter);
}
close(FF);
$dbh->commit();
$dbh->disconnect();
sub insert_test(){
my ($createtime,$ipaddr,$counter) = @_;
#my $sql = $createtime." ".$ipaddr." ".$counter;
#print $sql
my $sql = "insert into test(createtime, ipaddr, counter)values(?, ?, ?)";
eval {
$sth = $dbh->prepare($sql);
$sth->bind_param(1, $createtime);
$sth->bind_param(2, $ipaddr);
$sth->bind_param(3, $counter);
$sth->execute();
$dbh->commit();
};
if ($@) {
print "errorcode $@\n";
}
}
四、附件介绍:
0、test.pl是perl脚本,test.log是整理好准备要插入的数据文件,test.sql是在mysql中建表的脚本。
1、先运行test.sql,在mysql中建表。
2、把test.log与test.pl放在同一个目录下。
3、运行test.pl可插入数据。
页:
[1]