内容简介:Perl读取mysql数据库
perl中常见的文件打开关闭有open和IO模块等,而有时候涉及大量的 数据保存和打开的时候,就得借助数据库的使用,提供缓存的功能,并 使得保存的数据占用量最少,访问更快捷。下面就 perl 的 mysql 数据库访问 做一个简要的介绍。
1. 数据库访问原理
- 加载对应数据库驱动
- 获得相应的连接
- 准备需要的查询数据 删除数据 更新数据
- 执行 sql 语句
- 获得相应的结果
2. perl DBI mysql实现
What is DBI?
"The DBI is the standard database interface module for Perl. It defines a set of methods, variables and conventions that provide a consistent database interface independent of the actual database being used." -- Tim Bunce
- 安装perl dbi
- 安装perl dbd:mysql驱动
- 加载数据库驱动dsn
- 从dsn获取相应的链接connect方法
- 执行相应的sql语句
- 注意,处理完毕最好做一个关闭操作( 这是一个技术问题,也是德行问题和习惯问题,编程的很多技术都是需要打开和关闭两个过程配对呈现 )
具体可以参考
- perl dbi官网手册
- Perl与数据库DBI快速入门
- A short guid of the dbi programming
- perl DBI 总结
- perl dbi链接mysql中文乱码
- 使用Perl DBI操作MySQL的一些建议
- perl快速入门 给出了所有的技术语言都可以由main函数引出很多其他的, 把技术当成你的习惯
- 一本perl参考书: Programming_the_Perl_DBI 该建议使用binmode解决乱码问题,
use utf8; binmode(STDOUT, ':encoding(utf8)'); binmode(STDIN, ':encoding(utf8)'); binmode(STDERR, ':encoding(utf8)');
也可以直接在命令行使用 perldoc dbi
查看dbi文档信息
3. 技术解决方案
feiji.txt:
汽车在高速行驶时,根据空气动力学原理,在行驶过程中会遇到空气阻力,围绕汽车重心同时产生纵向、侧向和垂直上升的三个方向的空气动力量,其中纵向为空气阻力。 为了有效地减少并克服汽车高速行驶时空气阻力的影响,人们设计使用了汽车尾翼,其作用就是使空气对汽车产生第四种作用力,即产生较大的对地面的附着力,它能抵消一部分升力,有效控制汽车上浮,使风阻系数相应减小,使汽车能紧贴在道路地面行驶,从而提高行驶的稳定性能。 工作原理 汽车尾翼作用 汽车尾翼的作用,就是在汽车高速行驶时,使空气阻力形成一个向下的压力,尽量抵消升力,有效控制气流下压力,使风阻系数相应减小,增加汽车的高速行驶稳定性;由于尾翼能降低汽车的空气阻力,因此高速汽车加装尾翼对于节省燃油也有一定的帮助;同时也使汽车的外形更加美观,起到一定的装饰作用。 汽车尾翼分类 玻璃钢尾翼:这类尾翼造型多样,有鸭舌状的、机翼状的,也有直板式的.比较好做造型,不过玻璃钢材质比较脆,韧性和刚性都较差,价格比较便宜。 铝合金尾翼:这类尾翼导流和散热效果不错,而且价格适中,不过重量要比其他材质的尾翼稍重些。 碳纤维尾翼:碳纤维尾翼刚性和耐久性都非常好.不仅重量轻而且也是最美观的一种尾翼.现在广泛被F1赛车采用不过价格比较昂贵。[1]
source code for perl:
#!/usr/bin/env perl #=============================================================================== # # FILE: testdbi.pl # # USAGE: ./testdbi.pl # # DESCRIPTION: # # OPTIONS: --- # REQUIREMENTS: --- # BUGS: --- # NOTES: --- # Author: Ye Zhaoliang # ORGANIZATION: # VERSION: 1.0 # CREATED: 2016/12/31 1:44:24 # REVISION: --- #=============================================================================== use strict; use warnings; use utf8; use CGI::Carp "fatalsToBrowser"; use strict; use warnings; use DBI; use CGI qw (:standard escapeHTML escape); my ($driver_name, $db_name, $db_host, $db_sock, $db_port, $db_user, $db_pswd, $dsn); $driver_name = 'mysql'; $db_name = 'mysql'; # database name $db_host = 'localhost'; $db_sock = '/tmp/mysql.sock'; $db_port = '3306'; $db_user = 'root'; $db_pswd = 'root'; # data source $dsn = "dbi:mysql:database=${db_name};hostname=${db_host};mysql_socket=${db_sock};port=${db_port}"; # ... set up connection to database (not shown) ... # connect mysql database my $dbh = DBI -> connect ($dsn, $db_user, $db_pswd, { RaiseError => 1, PrintError => 0 }); # put out initial part of page my $title = "$db_name Database Browser"; # html header and start_html h1 print header (); print start_html (-titlk => $title, -bgcolor => "white"); print h1 ($title); # parameters to look for in URL my $tbl_name = param ("tbl_name"); my $sort_col = param ("sort_col"); # If $tbl_name has no value, display a clickable list of tables. # Otherwise, display contents of the given table. $sort_col, if # set, indicates which column to sort by. !defined ($tbl_name) ? display_table_names ($dbh, $db_name) : display_table_contents ($dbh, $tbl_name, $sort_col); print end_html (); sub display_table_names { my ($dbh, $db_name) = @_; ## html p paragraph print p ("Select a table by clicking on its name:"); # retrieve reference to single-column array of table names my $ary_ref = $dbh -> selectcol_arrayref (qq{ SHOW TABLES FROM $db_name }); # Construct a bullet list using the ul() (unordered list) and # li() (list item) functions. Each item is a hyperlink that # re-invokes the script to display a particular table. my @item; foreach my $tbl_name (@{$ary_ref}) { my $url = sprintf ("%s?tbl_name=%s", url (), escape ($tbl_name)); my $link = a ({-href => $url}, escapeHTML ($tbl_name)); push (@item, li ($link)); } ## list control print ul (@item); } sub display_table_contents { my ($dbh, $tbl_name, $sort_col) = @_; my @rows; my @cells; # if sort column not specified, use first column $sort_col = "1" if !defined ($sort_col); # present a link that returns user to table list page # p control widget print p (a ({-href => url ()}, "Show Table List")); print p (strong ("Contents of $tbl_name table:")); ## select from database my $sth = $dbh -> prepare (qq{ SELECT * FROM $tbl_name ORDER BY $sort_col LIMIT 200 }); $sth -> execute (); # Use the names of the columns in the database table as the # headings in an HTML table. Make each name a hyperlink that # causes the script to be reinvoked to redisplay the table, # sorted by the named column. foreach my $col_name (@{$sth -> {NAME}}) { my $url = sprintf ("%s?tbl_name=%s;sort_col=%s", url (), escape ($tbl_name), escape ($col_name)); my $link = a ({-href => $url}, escapeHTML ($col_name)); push (@cells, th ($link)); } push (@rows, Tr (@cells)); # display table rows while (my @ary = $sth -> fetchrow_array ()) { @cells = (); foreach my $val (@ary) { # display value if non-empty, else display non-breaking space if (defined ($val) && $val ne "") { $val = escapeHTML ($val); } else { $val = " "; } push (@cells, td ($val)); } push (@rows, Tr (@cells)); } # display table with a border print table ({-border => "1"}, @rows); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C++标准模板库编程实战
Ivor Horton / 郭小虎、程聪 / 2017-1
《C++标准模板库编程实战》介绍最新的C++14标准的API、库和扩展,以及如何将它们运用到C++14程序中。在书中,作者Ivor Horton 则阐述了什么是STL,以及如何将它们应用到程序中。我们将学习如何使用容器、迭代器,以及如何定义、创建和应用算法。此外,还将学习函数对象和适配器,以及它们的用法。 阅读完本书之后,你将能够了解如何扩展STL,如何定义自定义类型的C++组件,你还将能够......一起来看看 《C++标准模板库编程实战》 这本书的介绍吧!