设为首页 收藏本站
查看: 946|回复: 0

[经验分享] Perl实现文件及数据库访问

[复制链接]

尚未签到

发表于 2017-5-18 10:18:01 | 显示全部楼层 |阅读模式
写了一个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、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-378689-1-1.html 上篇帖子: [perl]Wide character in print报错 下篇帖子: 【perl脚本】打印模式匹配内容(摘自perl入门 第五版)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表