基于Web的DBI开发
来源:互联网 发布:藤本壮介 house n知乎 编辑:程序博客网 时间:2024/05/16 17:30
在使用数据库数据时,经常需要使用多条SQL语句才能得到相应的数据,无法在一条语句实现 或者实现起来非常复杂,而且直接在用SQL语句获取的数据可读性也比较差 。我们可以通过脚本语言结合web开发来查询和呈现数据。
以perl(本人比较熟悉perl)为例, 用perl 来写CGI脚本查询数据库并把数据呈现在网页上。
准备工作,确保Linux服务器上安装了DBD::mysql 和 CGI Perl 模块
1. perl DBI
连接参数变量
my $dsn="DBI:mysql:prictice";my $user="root";my $password="";my %conn_attr=(RaiseError => 1, PrintError => 0, AutoCommit => 1);my $dbh = DBI->connect ($dsn,$user,$password,\%conn_attr);
重点介绍一下 %conn_attr
RaisError:当某个DBI方法里出现错误时, DBI就会发出异常消息,默认时它会调用die()来显示错误并退出
PrintError: 当某个DBI方法里出现错误时, DBI就会调用warn()来显示错误信息但不会退出
AutoCommit: 脚本会在自动提交模式下进行事务处理
DBI->connect() 连接数据库并且返回数据库对象的句柄。
查询数据库:
my $sth = $dbh->prepare("select last_name,first_name," ."city,state,street,email from member ORDER by last_name") or die "cannot connect to database";$sth->execute();
获取查询的数据:
while(my @ary = $sth->fetchrow_array()){ my $delin = ""; for ( my $i =0; $i < @ary; $i++) { $ary[$i] = "NULL" if !defined ($ary[$i]); print $delin, $ary[$i]; $delin = "\t"; } print "\n";}逐行获取查询的数据。
用来取回数据行的DBI方法,除了上边的fetchrow_array(), 还有3中方法
fetchrow_array() 元素是数据行的值得数值
fetchrow_arrayref() 对于数据行的值构成的数组的yinyong
fetch() 与fetchrow_arrayref() 相同
fetchrow_hashref() 对由数据行的值构成的数组的引用,键是数据列的名字
获取晚数据后,释放掉SQL句柄和数据库句柄
$sth->finish();$dbh->disconnect() or die"cannot disconnect from database";
2. Perl Web 开发
首先在脚本里面使用 CGI 模块
use CGI qw(:standard);在CGI模块里面有相应的函数帮我打印出http的开头部分,不用我们自己来写开头部分。
print header();print start_html(-title=>"member", -bgcolor=> "white");
上面我们从数据库里面获取的数据在网页中以表的形式呈现出来,对获取数据部分进行了修改,加入了html表格的信息。
while(my @ary = $sth->fetchrow_array()){ @cell=(); my $delin = ""; for ( my $i =0; $i < @ary; $i++) { $ary[$i] = "NULL" if !defined ($ary[$i]); push (@cell, td($ary[$i])); } push (@row, Tr(@cell));}
3. 全部代码
下面是全部的代码,将脚本放到cgi-bin目录下面。就可以通过网页看到我们查询的数据。
#!/usr/bin/perl -w#use strict;use diagnostics;use DBI;use CGI qw(:standard);my $dsn="DBI:mysql:prictice";my $user="root";my $password="";my %conn_attr=(RaiseError => 1, PrintError => 0, AutoCommit => 1);my @cell;my @row;print header();print start_html(-title=>"member", -bgcolor=> "white");my $dbh = DBI->connect ($dsn,$user,$password,\%conn_attr);my $sth = $dbh->prepare("select last_name,first_name," ."city,state,street,email from member ORDER by last_name") or die "cannot connect to database";$sth->execute();my @title=("last_name","first_name","city","state","street","email");foreach my $t (@title){ push (@cell, th($t));}push (@row, Tr(@cell));while(my @ary = $sth->fetchrow_array()){ @cell=(); my $delin = ""; for ( my $i =0; $i < @ary; $i++) { $ary[$i] = "NULL" if !defined ($ary[$i]); push (@cell, td($ary[$i])); } push (@row, Tr(@cell));}!DBI::err or die "Error during retreive";$sth->finish();$dbh->disconnect() or die"cannot disconnect from database";print table({-border => "1"}, @row);print end_html();
- 基于Web的DBI开发
- 基于WEB视频会议系统的开发
- 基于SOAP的Web Services的开发
- 开发基于Web的CSS设计器
- 基于pfw的web开发平台使用指南
- [WEB开发] 基于XMLHTTP的简单实例
- 基于Spring的web系统开发
- 基于weblogic+axis的web services开发
- 基于Java的Web应用开发规范
- 基于Java的Web应用开发规范
- 基于web开发的java常用工具
- 基于Java的Web应用开发规范
- (原创)JFreeChart实现基于WEB的开发
- 开发基于Web的CSS设计器
- Struts_基于MVC的Web开发框架
- 基于 Django 框架的敏捷 Web 开发
- 基于web工作流的开发(一)
- 基于python的web开发框架-CherryPy
- Shiro使用实例
- 用GDB调试程序(五)
- 分享daocloud联合创始人陈齐彦关于docker的一段阐述
- Hbase原理和基本架构
- java中含中文字符串的编码和解码问题。
- 基于Web的DBI开发
- 基于opencv的计算机视觉技术实现 第五章节第一个程序 改错
- 解决vs2015后端vshub.exe自动启动问题
- Android background背景图片平铺
- 用GDB调试程序(六)
- 关于错误:'str' object is not callable可能的原因之一
- 实现UITextField值变化的实时监视
- 淘宝卖家辅助工具有哪些比较好用的?
- 在linux环境下使用C++语言、rabbitMQ进行开发