跳至内容 Java Solaris 社区 Sun 商店 加入 SDN 我的个人档案 加入的益处
 
在 Sun Java Studio Creator 2 Web 应用程序中检索二进制数据
 
作者:Sakthivel Gopal,2006 年 4 月  
通常,Web 应用程序需要将二进制数据上载到数据库中,并在以后检索这些数据。此技术提示介绍了使用 Sun Java Studio Creator 2 IDE 开发的 Web 应用程序如何将二进制文件(如图像文件)上载到数据库中,以及如何让用户能够检索并查看这些文件。
 
目录
 
设置演示项目的说明
项目的工作原理
检索图像数据
将图像数据上载到数据库
Servlet 声明和映射
 
设置演示项目的说明

此技术提示提供了一个 zip 文件(名为 Demo_BLOB.zip),其中包括用于演示这些任务的 Java Studio Creator 2 项目。如果需要最大限度地从此技术提示中获取信息,您应该下载此 zip 文件并在 IDE 中打开项目。

请按照以下步骤设置此 zip 文件中包含的演示项目。

  1. 下载 Demo_BLOB.zip 文件并将其内容解压缩到一个目录中。

  2. 在捆绑的数据源中创建一个名为 DEMO_BLOB 的表。该步骤的说明可能会因所使用 IDE 版本的不同而有所不同。

    1. 如果您使用的是 Java Studio Creator 2 IDE:
      请在“服务器”窗口中,右键单击 "Order" 数据源节点,然后从其上下文菜单中选择“查看数据”。这将在设计窗口中打开查询。复制下面显示的 CREATE TABLE SQL 代码并将其粘贴到“查询”文本区域中,然后单击“运行查询”按钮以执行命令。该 SQL 代码将在 PointBase 样例数据库的 PBPUBLIC 结构中创建所需的表。
      CREATE TABLE DEMO_BLOB (
      IDCOL INTEGER IDENTITY (1,1) PRIMARY KEY,
      BLOBCOL BLOB)
      
    2. 如果您使用的是 Java Studio Creator 2 Update 1 IDE:
      在“服务器”窗口中,右键单击 "Travel" 数据源节点,然后从其上下文菜单中选择“查看数据”。这将在设计窗口中打开查询。复制下面显示的 CREATE TABLE SQL 代码并将其粘贴到“查询”文本区域中,然后单击“运行查询”按钮以执行命令。该 SQL 代码将在捆绑的样例数据库中创建所需的表。
      CREATE TABLE DEMO_BLOB ( 
      IDCOL INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, 
      INCREMENT BY 1), 
      BLOBCOL BLOB)
      
  3. 在 IDE 中打开项目。项目打开后,单击“运行主项目”(也就是绿色箭头所指示的图标)工具栏按钮。

  4. 当应用程序的浏览器打开时,单击 "Browse" 并选择图像文件。您可以在 $Demo_Blob/web/sample_images 文件夹(位于您解压缩该项目的目录下)中找到该项目的一些样例图像文件。

  5. 单击 "Upload File into Database" 按钮,将所选的图像文件上载到数据库中。应用程序还可以检索此数据库表中存储的所有图像,并在表组件中显示它们。请参见图 1。
图 1:浏览器窗口中运行的项目
图 1:浏览器窗口中运行的项目(单击以放大)
 
项目的工作原理

以下介绍了演示项目是如何完成这些任务的。该项目使用 Servlet 来执行实际的图像文件检索,而事件处理程序中的代码用于上载图像文件。下面让我们来仔细了解一下它的工作原理。

检索图像数据

如果检查 DisplayImage.java(位于关联的演示 zip 文件中)的代码,您将看到 DisplayImage 可以获取给定标识符的图像。DisplayImage 中的 getImage 方法可以执行查询来检索图像数据(实际的查询会随使用的 IDE 版本的不同而有所变化)。

如果使用的是 Java Studio Creator 2 IDE,getImage 方法会执行以下查询:

rs=sta.executeQuery("SELECT * FROM PBPUBLIC.DEMO_BLOB where IDCOL="+id);

如果使用的是 Java Studio Creator 2 IDE Update 1,则 getImage 方法会执行以下查询:

rs=sta.executeQuery("SELECT * FROM TRAVEL.DEMO_BLOB where IDCOL="+id);

此 SELECT 语句会返回从数据库中获取的 BLOB 数据,该数据使用图像组件来显示。表中图像组件的 url 属性使用 DisplayServlet URL 来获取图像。

DisplayImage Servlet 只是一个在“项目”窗口中“源包”节点下创建的 Java Servlet 类。此 Servlet 接受一个参数 id,即图像数据的标识符。从上面的查询语句中可以看到,在 SELECT 语句中使用 id 参数来获取 BLOB_COL。Servlet 的 processRequest 方法会在响应中将图像列以二进制流的形式发送出去。

将图像数据上载到数据库

将图像数据上载到数据库是由上载按钮的操作处理程序来完成的。文件上载组件会以多部分请求的形式将所选文件(即包含图像数据的文件)传输到服务器。上载按钮的操作处理程序将执行以下操作:

  • 在与此数据库表关联的数据提供器中附加一行
  • byte[] 数据的形式获取图像文件
  • 将 BLOB 列的值设置为此 byte[] 数据
  • 调用数据提供器的 commitChanges 方法,将新附加的行插入到数据库中。
Servlet 声明和映射

DisplayImage Servlet 及其映射的声明位于 WEB-INF/web.xml 文件中,如下所示:

<servlet>
	<servlet-name>DisplayImage</servlet-name>
	<servlet-class>demo_blob.DisplayImage</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>DisplayImage</servlet-name>
	<url-pattern>/servlet/DisplayImage</url-pattern>
</servlet-mapping>
更多的开发者资源

有关为开发者提供的更多技术提示、文章和专家建议,请访问 Sun Developer Network (SDN) 上的 Java Studio Creator 开发者资源

 
Sakthivel Gopal 是 Java Studio Creator 质量工程小组的成员。