Perl读取mysql数据库

栏目: Perl · 发布时间: 7年前

内容简介:Perl读取mysql数据库

perl中常见的文件打开关闭有open和IO模块等,而有时候涉及大量的 数据保存和打开的时候,就得借助数据库的使用,提供缓存的功能,并 使得保存的数据占用量最少,访问更快捷。下面就 perlmysql 数据库访问 做一个简要的介绍。

1. 数据库访问原理

  1. 加载对应数据库驱动
  2. 获得相应的连接
  3. 准备需要的查询数据 删除数据 更新数据
  4. 执行 sql 语句
  5. 获得相应的结果

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
  1. 安装perl dbi
  2. 安装perl dbd:mysql驱动
  3. 加载数据库驱动dsn
  4. 从dsn获取相应的链接connect方法
  5. 执行相应的sql语句
  6. 注意,处理完毕最好做一个关闭操作( 这是一个技术问题,也是德行问题和习惯问题,编程的很多技术都是需要打开和关闭两个过程配对呈现 )

具体可以参考

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++标准模板库编程实战

C++标准模板库编程实战

Ivor Horton / 郭小虎、程聪 / 2017-1

《C++标准模板库编程实战》介绍最新的C++14标准的API、库和扩展,以及如何将它们运用到C++14程序中。在书中,作者Ivor Horton 则阐述了什么是STL,以及如何将它们应用到程序中。我们将学习如何使用容器、迭代器,以及如何定义、创建和应用算法。此外,还将学习函数对象和适配器,以及它们的用法。 阅读完本书之后,你将能够了解如何扩展STL,如何定义自定义类型的C++组件,你还将能够......一起来看看 《C++标准模板库编程实战》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具