加快JDBC中JSP数据库的访问速度

母仪天下NO111

母仪天下NO111

2016-02-19 13:21

每个人都希望每天都是开心的,不要因为一些琐事扰乱了心情还,闲暇的时间怎么打发,关注图老师可以让你学习更多的好东西,下面为大家推荐加快JDBC中JSP数据库的访问速度,赶紧看过来吧!

JSP程序都是模块,并且具有强大的表达-请求(divsentation-request)功能。

建立一个完美的数据库访问是一个具有挑战的过程,而JDBC接口能够很好地完成这一过程。

然而,嵌入于JSP代码中的JDBC代码,与SQL命令嵌入在JDBC一样,可以充分利用JSP的功能,为客户端建立一个整洁而简便的API。为了达到这一目的,我们可以考虑到使用JSP操作来建立数据库接口组件。

完美的JSP设计模式是Model-View-Controller (MVC)。传统三层体系为:Model为程序逻辑和数据;View为查看;以及Controller为请求处理。遵循这一模型,一个JSP程序包含客户端-服务器“对话框”的每一“行”的页面。在一个典型的程序中,你可以看到一个查询页面,一个验证页面,一个数据库插入页面,一个数据库更新页面,等等。

JDBC设计的JSP操作

JSP数据库操作的另一方法是,在不使用JDBC的情况下为数据库建立一些操作的集合。使用这种方法,你可以得到两种好处:

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

第一,你可以消除使用JDBC的必要,这就使得很多工作得以简化;

第二,你的设计和代码的组织更加合理(比如可读性,灵活性,以及可维护性)。

你仍然需要一些驱动程序,但你首先简化以上的操作。JSP程序中的操作都是一些逻辑块,通常被其它的JSP程序开发者编写和利用,但你可以把它们当成子程序来使用。使用JSP操作的意义是标准化某些功能,以及最大程度地减少嵌入在JSP的Java代码数量。

JSP提供了一套标准扩展的类。通过这些类,你可以通过一个标签管理器器(tag handler)定义一个操作。这里有两个JSP定义的Java接口:Tag接口和BodyTag接口,分别是由TagSupport类和BodyTagSupport类执行。

你可以建立通用JSP用途的一个标签库,并且你也可以执行标签管理器(tag handler)以扩展类的支持。以下是实现这些过程的步骤。

首先,执行一个标签管理器的类:

 packagecom.myactions;
  (importstatementsgohere)
  publicclassMyActionTagextendsTagSupport{
  ...
  }

接着,编译这段代码,并将类文件放置在程序的类库中。然后,你将需要一个Tag Library Descriptor (TLD)文件,这是一个XML文件,以匹配你的操作名称和相应的标签管理器的类。

MyAction
com.myactions.MyActionTag
(whatever)
myData

相关的Trialware

.DbUtils (Apache Software Foundation)

.IBM Informix JDBC Driver (IBM)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

.MySQL Connector/J 3.0 (MySQL AB)

.SQL4X Manager J 2.2 (MacosGuru)

.Informix Downloads (IBM Red Brick Warehouse 32bit) (Solaris) (IBM)

.Informix Downloads (IBM Red Brick Warehouse 64bit) (HPUX) (IBM)

更多Trialware

假设你已经建立一个名为MyAction的操作,这是一个与com.myactions.MyActionTag类匹配的TLD。TLD文件必须位于程序的TLDs路径。

当你从一个JSP页调用操作时,TLD告诉JSP正确的类以使用操作。这就带来极大的方便,而且只需要少量的代码。

但是,从何引入SQL?首先,你需要建立具有连接功能的数据库访问。你可以使用javax接口来完成,而javax可见于JDBC 2.0 Optional工具箱。JDBC 2.0的javax.sql.DataSource类提供了你所需要的连接。

此时,SQL位于什么地方?它在bean中。你可以使用JDBCcreateStatement和PreparedStatement在bean中建立一个方法。将这一方法成为一个公共的Vector,并正确地将你的SQL声明传递到这一方法。

总结

你的数据库bean执行一个嵌入在操作体的SQL语句,你可以传递一个语句给SQL语句,或者使用它来执行一个预先的操作。可以通过标签管理器来执行你的操作。由于JDBC被嵌入于库代码中,你将不能在JSP程序中明确地使用它。

初次使用这种方法会觉得它比JDBC中的嵌入SQL,以及JSP中的嵌入JDBC更加复杂,但是,你建立SQL操作并将它们存放在一个TLD,你只需做一次,在所有的JSP程序中就可以访问这些操作。这就是这种方法的优点。

将此文件保存为InputImage.jsp文件,其中testimage.jsp文件是用来将图片数据存入数据库的,具体代码如下所示:

%@ page contentType="text/html;charset=gb2312"%
%@ page import="java.sql.*" %
%@ page import="java.util.*"%
%@ page import="java.text.*"%
%@ page import="java.io.*"%
html
body
%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//加载驱动程序类
Connection con=DriverManager.getConnection("jdbc:odbc:denglu","sa","sa");
//建立数据库联机,其中denglu为数据库名,sa为连接数据库的帐号及密码。
Statement stmt=con.createStatement();
//建立Statement对象
String content=request.getParameter("content");
content=new String(content.getBytes("8859_1"),"gb2312");
String filename=request.getParameter("image");
filename=new String(filename.getBytes("8859_1"),"gb2312");
String detail=request.getParameter("txtmail");
detail=new String(detail.getBytes("8859_1"),"gb2312");
//获得所要显示图片的标题、存储路径、内容,并进行中文编码
FileInputStream str=new FileInputStream(filename);
String sql="insert into picturenews(content,image,detail) values(?,?,?)";
PreparedStatement pstmt=con.prepareStatement(sql);
pstmt.setString(1,content);
pstmt.setBinaryStream(2,str,str.available());
pstmt.setString(3,detail);
pstmt.execute();
//将数据存入数据库
out.println("Success,You Have Insert an Image Successfully");
%
4、网页中动态显示图片

接下来我们要编程从数据库中取出图片,其代码如下所示。

%@ page contentType="text/html;charset=gb2312"%
%@ page import="java.sql.*" %
%@ page import="java.util.*"%
%@ page import="java.text.*"%
%@ page import="java.io.*"%
html
body
%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//加载驱动程序类
Connection con=DriverManager.getConnection("jdbc:odbc:denglu","sa","sa");
Statement stmt=con.createStatement();
ResultSet rs=null;
//建立ResultSet(结果集)对象
int id= Integer.parseInt(request.getParameter("id"));
//获得所要显示图片的编号id,并转换为整型
String sql = "select image from picturenews WHERE id="+id+"";
//要执行查询的SQL语句
rs=stmt.executeQuery(sql);
while(rs.next()) {
ServletOutputStream sout = response.getOutputStream();
//图片输出的输出流
InputStream in = rs.getBinaryStream(1);
byte b[] = new byte[0x7a120];
for(int i = in.read(b); i != -1;)
{
sout.write(b);
//将缓冲区的输入输出到页面
in.read(b);
}
sout.flush();
//输入完毕,清除缓冲
sout.close();
}
%
/body
/html
将此文件保存为testimageout.jsp文件。下一步要做的工作就是使用HTML标记:

IMG src="testimageout.jsp?id=%=rs.getInt("id")%" width=100 height=100

1、引言

数据库应用程序,特别是基于WEB的数据库应用程序,常会涉及到图片信息的存储和显示。通常我们使用的方法是将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,在JSP中建立相应的数据源,利用数据库访问技术处理图片信息。但是,如果我们想动态的显示图片,上述方法就不能满足需要了。我们必须把图片存入数据库,然后通过编程动态地显示我们需要的图片。实际操作中,可以利用JSP的编程模式来实现图片的数据库存储和显示。

2、建立后台数据库

假定处理的是图片新闻,那么我们可以建立相应的数据库及数据表对象。我们要存取的数据表结构的SQL脚本如下所示:

if exists (select * from dbo.sysobjects where id =
object_id(N'[dbo].[picturenews]') andOBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[picturenews]
GO
CREATE TABLE [dbo].[picturenews] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[image] [image] NULL ,
[content] [varchar] (500) COLLATE Chinese_PRC_CI_AS NULL ,
[detail] [varchar] (5000) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
表picturenews中,字段id作为标识,每存储一行数据,自动增加1。字段image用于存储图片信息,其数据类型为“image”。

3、向数据库存储二进制图片

启动Dreamweaver MX后,新建一个JSP文件。其代码如下所示。

%@ page contentType="text/html;charset=gb2312"%
HTML
HEAD
TITLE存储图片/TITLE
/HEAD
body
!-- 下面的窗体将以Post方法,将数据传递给testimage.jsp文件 --
FORM METHOD=POST ACTION="testimage.jsp"
新 闻 标 题:INPUT TYPE="text" NAME="content"BR
新 闻 图 片:INPUT TYPE="file" NAME="image"BR
新闻内容:
TEXTAREA name="txtmail" rows="15" cols="90"
style="BORDER-BOTTOM: #000000 1px solid; BORDER-LEFT: #000000 1px solid;
BORDER-RIGHT: #000000 1px solid; BORDER-TOP: #000000 1px solid; FONT-SIZE: 9pt;
HEIGHT: 200px; WIDTH: 100%" wrap="physical" /TEXTAREAbr
INPUT TYPE="submit"/form
/body
/HTML

取出所要显示的图片,其中id是所要取出图片的编号。本例中我们输出了第一个和最后一个图片信息,详细的程序代码如下所示。

%@ page contentType="text/html;charset=gb2312"%
%@ page import="java.sql.*" %
html
head
title动态显示数据库图片/title
/head
body
%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:denglu","sa","sa");
Statement stmt=con.createStatement();
String sql=new String();
sql= "select * from picturenews";
ResultSet rs=stmt.executeQuery(sql);
rs.last();
//将指针移至最后一条记录
%
table
trtdIMG height=99 src="testimageout.jsp?id=1" width=136/td
//取出第一个图片
tdIMG height=99 src="testimageout.jsp?id=%=rs.getInt("id")%" width=136/td
//取出最后一个图片
/tr/table
/body
/html
以上WEB应用程序在Windows 2000 Professional/SQL Server 2000/ Apache Tomcat 4.0/JDK 1.4 JAVA环境下调试通过。

展开更多 50%)
分享

猜你喜欢

加快JDBC中JSP数据库的访问速度

Web开发
加快JDBC中JSP数据库的访问速度

加快JDBC设计中JSP访问数据库

Java JAVA基础
加快JDBC设计中JSP访问数据库

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

JDBC数据库访问例子(1)

Java JAVA基础
JDBC数据库访问例子(1)

JDBC数据库访问例子(2)

Java JAVA基础
JDBC数据库访问例子(2)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

使用JDBC创建数据库访问程序

编程语言 网络编程
使用JDBC创建数据库访问程序

如何提高数据库的访问速度

编程语言 网络编程
如何提高数据库的访问速度

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

网页设计从业者必看的职业规划

网页设计从业者必看的职业规划

如何设置Tomcat默认主页(指定欢迎页)?

如何设置Tomcat默认主页(指定欢迎页)?
下拉加载更多内容 ↓