如何在java中读取oracle blob

如何在java中读取oracle blob,第1张

整个流程分为四步,连接oracle数据库 -> 读取blob字段 -> 对进行缩放 ->把展示在jsp页面上。

下面进行详细描述:

1 java连接Oracle

注:数据库是Oracle10g版本为1020, 在数据库中,字段类型为BLOB。

java中通常使用的是通过jdbc驱动来连接数据库,oracle也不例外,因此必须下载一个Oracle驱动的jdbc需要去网上进行下载,名称为 ojdbc14jar。

下载地址为:

下载了驱动之后,可以使用驱动里提供的接口进行连接,具体代码如下:

import javasql;

import javaio;

import javaximageioImageIO;

import javaawtimageBufferedImage;

import javaawtimageAffineTransformOp;

import javaawtgeomAffineTransform;

public class OracleQueryBean {

private final String oracleDriverName = "oraclejdbcdriverOracleDriver";

private Connection myConnection = null;

/表名/

private String strTabName;

/ID字段名/

private String strIDName;

/字段名/

private String strImgName;

/

加载java连接Oracle的jdbc驱动

/

public OracleQueryBean(){

try{

ClassforName(oracleDriverName);

}catch(ClassNotFoundException ex){

Systemoutprintln("加载jdbc驱动失败,原因:" + exgetMessage());

}

}

/

获取Oracle连接对象

@return Connection

/

public Connection getConnection(){

try{

//用户名+密码; 以下使用的Test就是Oracle里的表空间

//从配置文件中读取数据库信息

GetPara oGetPara = new GetPara();

String strIP = oGetParagetPara("serverip");

String strPort = oGetParagetPara("port");

String strDBName = oGetParagetPara("dbname");

String strUser = oGetParagetPara("user");

String strPassword = oGetParagetPara("password");

thisstrTabName = oGetParagetPara("tablename");

thisstrIDName = oGetParagetPara("imgidname");

thisstrImgName = oGetParagetPara("imgname");

String oracleUrlToConnect ="jdbc:oracle:thin:@"+strIP+":"+strPort+":"+strDBName;

thismyConnection = DriverManagergetConnection(oracleUrlToConnect, strUser, strPassword);

}catch(Exception ex){

Systemoutprintln("Can not get connection:" + exgetMessage());

Systemoutprintln("请检测配置文件中的数据库信息是否正确" );

}

return thismyConnection;

}

}

2 读取blob字段

在OracleQueryBean类中增加一个函数,来进行读取,具体代码如下:

/

根据在数据库中的ID进行读取

@param strID字段ID

@param w 需要缩到的宽度

@param h 需要缩到高度

@return

/

public byte[] GetImgByteById(String strID, int w, int h){

//Systemoutprintln("Get img data which id is " + nID);

if(myConnection == null)

thisgetConnection();

byte[] data = null;

try {

Statement stmt = myConnectioncreateStatement();

ResultSet myResultSet = stmtexecuteQuery("select " + thisstrIDName + " from " + thisstrTabName + " where " + thisstrIDName + "=" + strID);

StringBuffer myStringBuffer = new StringBuffer();

if (myResultSetnext()) {

javasqlBlob blob = myResultSetgetBlob(thisstrImgName);

InputStream inStream = blobgetBinaryStream();

try {

long nLen = bloblength();

int nSize = (int) nLen;

//Systemoutprintln("img data size is :" + nSize);

data = new byte[nSize];

inStreamread(data);

inStreamclose();

} catch (IOException e) {

Systemoutprintln("获取数据失败,原因:" + egetMessage());

}

data = ChangeImgSize(data, w, h);

}

Systemoutprintln(myStringBuffertoString());

myConnectioncommit();

myConnectionclose();

} catch (SQLException ex) {

Systemoutprintln(exgetMessage());

}

return data;

}

3 缩放

因为的大小可能不一致,但是在页面中输出的大小需要统一,所以需要

在OracleQueryBean类中增加一个函数,来进行缩放,具体代码如下:

/

缩小或放大

@param data 的byte数据

@param w 需要缩到的宽度

@param h 需要缩到高度

@return 缩放后的的byte数据

/

private byte[] ChangeImgSize(byte[] data, int nw, int nh){

byte[] newdata = null;

try{

BufferedImage bis = ImageIOread(new ByteArrayInputStream(data));

int w = bisgetWidth();

int h = bisgetHeight();

double sx = (double) nw / w;

double sy = (double) nh / h;

AffineTransform transform = new AffineTransform();

transformsetToScale(sx, sy);

AffineTransformOp ato = new AffineTransformOp(transform, null);

//原始颜色

BufferedImage bid = new BufferedImage(nw, nh, BufferedImageTYPE_3BYTE_BGR);

atofilter(bis, bid);

//转换成byte字节

ByteArrayOutputStream baos = new ByteArrayOutputStream();

ImageIOwrite(bid, "jpeg", baos);

newdata = baostoByteArray();

}catch(IOException e){

eprintStackTrace();

}

return newdata;

}

4 展示在页面

页面使用OracleQueryBean来根据用户提供的id进行查询,在读取并进行缩放后,通过jsp页面进行展示,具体代码如下:

<%@ page language="java" contentType="text/html;;charset=gbk" %>

<jsp:useBean id="OrcleQuery" scope="page" class="HLFtiDemoOracleQueryBean" />

<%

responsesetContentType("image/jpeg");

//在数据库中的 ID

String strID = requestgetParameter("id");

//要缩略或放大的宽度

String strWidth = requestgetParameter("w");

//要缩略或放大的高度

String strHeight = requestgetParameter("h");

byte[] data = null;

if(strID != null){

int nWith = IntegerparseInt(strWidth);

int nHeight = IntegerparseInt(strHeight);

//获取的byte数据

data = OrcleQueryGetImgByteById(strID, nWith, nHeight);

ServletOutputStream op = responsegetOutputStream();

opwrite(data, 0, datalength);

opclose();

op = null;

responseflushBuffer();

//清除输出流,防止释放时被捕获异常

outclear();

out = pageContextpushBody();

}

%>

5 OracleQueryBean查询类的整体代码

OracleQueryBeanjava文件代码如下所示:

import javasql;

import javaio;

import javaximageioImageIO;

import javaawtimageBufferedImage;

import javaawtimageAffineTransformOp;

import javaawtgeomAffineTransform;

public class OracleQueryBean {

private final String oracleDriverName = "oraclejdbcdriverOracleDriver";

private Connection myConnection = null;

/表名/

private String strTabName;

/ID字段名/

private String strIDName;

/字段名/

private String strImgName;

/

加载java连接Oracle的jdbc驱动

/

public OracleQueryBean(){

try{

ClassforName(oracleDriverName);

}catch(ClassNotFoundException ex){

Systemoutprintln("加载jdbc驱动失败,原因:" + exgetMessage());

}

}

/

获取Oracle连接对象

@return Connection

/

public Connection getConnection(){

try{

//用户名+密码; 以下使用的Test就是Oracle里的表空间

//从配置文件中读取数据库信息

GetPara oGetPara = new GetPara();

这文章确实写的不错,你可以看原文

楼主是不是要这个?

update zb_1001 t set tzb_mx=to_blob(rawtohex(

select wm_concat(azb_id || '是否需要分隔符' || zb_mc) from zb_0000

))where tzb_dm='1001'

这样原先的每一行数据会以 逗号 隔开,存入 zb_1001 表的一列,因为您是需要 zb_0000 表中的两列,所以您是不是要考虑分隔符呢。

如有问题,请追问。

以上就是关于如何在java中读取oracle blob全部的内容,包括:如何在java中读取oracle blob、oracle 关于blob、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9561118.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-29
下一篇2023-04-29

发表评论

登录后才能评论

评论列表(0条)

    保存