您的位置:首页 > 编程语言 > Java开发

Flex存取数据库Image类型数据-Java后台

2011-01-03 18:55 555 查看
如果将图片数据储存在数据库内,如何把它显示出来,本例涉及技术语言有:
1. Flex ByteArray转化为图片SWFLoader/Image
2. LCDS RemoteObject运用
3. Java SE 6与Hibernate
4. MS SQL Server 2008 R2 Image数据类型存取
数据如:



Flex 显示结果,这里是id为5的图片



l 数据库创建
本例使用MS SQL Server 2008 R2,创建一个表AlbumImage,图见上
CREATE TABLE [dbo].[AlbumImage](
[id] [int] IDENTITY(1,1) NOT NULL,
[ImageData] [image] NULL,
[ImageName] [nvarchar](50) NULL,
[ImageType] [nvarchar](50) NULL,
CONSTRAINT [PK_AlbumImage] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

使用Java 6和Hibernate作为后台服务并与数据库打交道,AlbumImage.hbm.xml全文
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2011-1-3 14:16:57 by Hibernate Tools 3.2.4.GA -->
<hibernate-mapping>
<class name="com.les.java3016.AlbumImage" table="AlbumImage" schema="dbo" catalog="XTJC">
<id name="id" type="int">
<column name="id" />
<generator class="assigned" />
</id>
<property name="imageData" type="binary">
<column name="ImageData" />
</property>
<property name="imageName" type="string">
<column name="ImageName" />
</property>
<property name="imageType" type="string">
<column name="ImageType" />
</property>
</class>
</hibernate-mapping>

l Java主要服务文件AlbumImageService.Java
public class AlbumImageService {
// 根据id获取一个AlbumImage
Private AlbumImage getAlbumImage(int identity){
Session session = HibernateUtil.getSessionFactory().openSession();
Transaction tx =session.beginTransaction();
AlbumImage item=new AlbumImage();
try{
item = (AlbumImage)session.get(com.les.java3016.AlbumImage.class, identity);
tx.commit();
}
catch (Exception e) {
tx.rollback();
System.out.println("代号:1002,getAlbumImage错误");
}
finally{
session.close();
HibernateUtil.getSessionFactory().close();
}
return item;
}

// 对外方法,获取一个AlbumImage的属性ImageData,该属性就是储存了image的二进制数据

public byte[] getImageData (int _id){
byte[] _imageData=null;
_imageData=this.getAlbumImage(_id).getImageData();
return _imageData;
}
}
l LCDS的remoting-config.xml,这个很简单,加一个关联远程java对象的destination。
<destination id="echo2005U">
<properties>
<source>com.les.java3016.AlbumImageService</source>
</properties>
</destination>

l Flex文件,首先定义一个RemoteObject和一个SWFLoader

<mx:RemoteObject id="srv" destination="echo2005U" result="onselectresult(event)" fault="onfault(event)"/>
<mx:SWFLoader id="mySwfLoader" scaleContent="true"/>

加入RemoteObject事件处理函数,java的byte[] 转化为AS3的flash.utils.ByteArray类型。
//结果处理函数
private function onselectresult(event:ResultEvent):void{
var _imageData:ByteArray=ByteArray(event.result);
_imageLoader=new Loader();
_imageLoader.loadBytes(_imageData);
mySwfLoader.addChild(_imageLoader);
}

//处理错误函数
private function onfault(event:FaultEvent):void{
Alert.show(event.fault.faultString, 'Error');
}

本例将远程调用放于Application的creationComplete事件
protected function application1_creationCompleteHandler(event:FlexEvent):void
{ //取得Id为5的图片;
srv.getImageData(5);
}

完毕。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: