整个流程分为四步,连接oracle数据库 - 读取blob图片字段 - 对图片进行缩放 -把图片展示在jsp页面上。
为元宝等地区用户提供了全套网页设计制作服务,及元宝网站建设行业解决方案。主营业务为成都网站制作、成都网站建设、元宝网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
下面进行详细描述:
1. java连接Oracle
注:数据库是Oracle10g版本为10.2.0, 在数据库中,图片字段类型为BLOB。
java中通常使用的是通过jdbc驱动来连接数据库,oracle也不例外,因此必须下载一个Oracle驱动的jdbc需要去网上进行下载,名称为 ojdbc14.jar。
下载地址为:
下载了驱动之后,可以使用驱动里提供的接口进行连接,具体代码如下:
import java.sql.*;
import java.io.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
public class OracleQueryBean {
private final String oracleDriverName = "oracle.jdbc.driver.OracleDriver";
private Connection myConnection = null;
/*图片表名*/
private String strTabName;
/*图片ID字段名*/
private String strIDName;
/*图片字段名*/
private String strImgName;
/**
* 加载java连接Oracle的jdbc驱动
*/
public OracleQueryBean(){
try{
Class.forName(oracleDriverName);
}catch(ClassNotFoundException ex){
System.out.println("加载jdbc驱动失败,原因:" + ex.getMessage());
}
}
/**
* 获取Oracle连接对象
* @return Connection
*/
public Connection getConnection(){
try{
//用户名+密码; 以下使用的Test就是Oracle里的表空间
//从配置文件中读取数据库信息
GetPara oGetPara = new GetPara();
String strIP = oGetPara.getPara("serverip");
String strPort = oGetPara.getPara("port");
String strDBName = oGetPara.getPara("dbname");
String strUser = oGetPara.getPara("user");
String strPassword = oGetPara.getPara("password");
this.strTabName = oGetPara.getPara("tablename");
this.strIDName = oGetPara.getPara("imgidname");
this.strImgName = oGetPara.getPara("imgname");
String oracleUrlToConnect ="jdbc:oracle:thin:@"+strIP+":"+strPort+":"+strDBName;
this.myConnection = DriverManager.getConnection(oracleUrlToConnect, strUser, strPassword);
}catch(Exception ex){
System.out.println("Can not get connection:" + ex.getMessage());
System.out.println("请检测配置文件中的数据库信息是否正确." );
}
return this.myConnection;
}
}
2. 读取blob字段
在OracleQueryBean类中增加一个函数,来进行读取,具体代码如下:
/**
* 根据图片在数据库中的ID进行读取
* @param strID图片字段ID
* @param w 需要缩到的宽度
* @param h 需要缩到高度
* @return
*/
public byte[] GetImgByteById(String strID, int w, int h){
//System.out.println("Get img data which id is " + nID);
if(myConnection == null)
this.getConnection();
byte[] data = null;
try {
Statement stmt = myConnection.createStatement();
ResultSet myResultSet = stmt.executeQuery("select " + this.strIDName + " from " + this.strTabName + " where " + this.strIDName + "=" + strID);
StringBuffer myStringBuffer = new StringBuffer();
if (myResultSet.next()) {
java.sql.Blob blob = myResultSet.getBlob(this.strImgName);
InputStream inStream = blob.getBinaryStream();
try {
long nLen = blob.length();
int nSize = (int) nLen;
//System.out.println("img data size is :" + nSize);
data = new byte[nSize];
inStream.read(data);
inStream.close();
} catch (IOException e) {
System.out.println("获取图片数据失败,原因:" + e.getMessage());
}
data = ChangeImgSize(data, w, h);
}
System.out.println(myStringBuffer.toString());
myConnection.commit();
myConnection.close();
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
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 = ImageIO.read(new ByteArrayInputStream(data));
int w = bis.getWidth();
int h = bis.getHeight();
double sx = (double) nw / w;
double sy = (double) nh / h;
AffineTransform transform = new AffineTransform();
transform.setToScale(sx, sy);
AffineTransformOp ato = new AffineTransformOp(transform, null);
//原始颜色
BufferedImage bid = new BufferedImage(nw, nh, BufferedImage.TYPE_3BYTE_BGR);
ato.filter(bis, bid);
//转换成byte字节
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bid, "jpeg", baos);
newdata = baos.toByteArray();
}catch(IOException e){
e.printStackTrace();
}
return newdata;
}
4. 展示在页面
页面使用OracleQueryBean来根据用户提供的图片id进行查询,在读取并进行缩放后,通过jsp页面进行展示,具体代码如下:
%@ page language="java" contentType="text/html;;charset=gbk" %
jsp:useBean id="OrcleQuery" scope="page" class="HLFtiDemo.OracleQueryBean" /
%
response.setContentType("image/jpeg");
//图片在数据库中的 ID
String strID = request.getParameter("id");
//要缩略或放大图片的宽度
String strWidth = request.getParameter("w");
//要缩略或放大图片的高度
String strHeight = request.getParameter("h");
byte[] data = null;
if(strID != null){
int nWith = Integer.parseInt(strWidth);
int nHeight = Integer.parseInt(strHeight);
//获取图片的byte数据
data = OrcleQuery.GetImgByteById(strID, nWith, nHeight);
ServletOutputStream op = response.getOutputStream();
op.write(data, 0, data.length);
op.close();
op = null;
response.flushBuffer();
//清除输出流,防止释放时被捕获异常
out.clear();
out = pageContext.pushBody();
}
%
5. OracleQueryBean查询类的整体代码
OracleQueryBean.java文件代码如下所示:
import java.sql.*;
import java.io.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.AffineTransformOp;
import java.awt.geom.AffineTransform;
public class OracleQueryBean {
private final String oracleDriverName = "oracle.jdbc.driver.OracleDriver";
private Connection myConnection = null;
/*图片表名*/
private String strTabName;
/*图片ID字段名*/
private String strIDName;
/*图片字段名*/
private String strImgName;
/**
* 加载java连接Oracle的jdbc驱动
*/
public OracleQueryBean(){
try{
Class.forName(oracleDriverName);
}catch(ClassNotFoundException ex){
System.out.println("加载jdbc驱动失败,原因:" + ex.getMessage());
}
}
/**
* 获取Oracle连接对象
* @return Connection
*/
public Connection getConnection(){
try{
//用户名+密码; 以下使用的Test就是Oracle里的表空间
//从配置文件中读取数据库信息
GetPara oGetPara = new GetPara();
这文章确实写的不错,你可以看原文
1. 获得远程数据库的tns信息和要访问的对象的拥有者及其密码
2.创建dblink
create database link "DBLINK_NAME" connect to "USER_NAME" identified by "PASSWD" using ' (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = lnwxzyp)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = demo)
)
)
';
3.查看
select * from view_name@dblink_name;
也可以建成同义词
create synonym OBJ_NAME for view_name@dblink_name;
建成视图
create view VIEW_NAME as select * from view_name@dblink_name;
楼主你好!根据你的描述,让我来给你回答!
create table temp_blob as select blob_colname from tbname ;
然后使用exp或者expdp 。
或者你也可以使用第三方编程语言或者软件来导出。
希望能帮到你,如果满意,请记得采纳哦~~~
错误没贴出来。 我只能猜测:
string sql = "select * from t_users where USER=@USER and PASS=@PASS";
string[,] UserInfo = { { "@Uname", loginInfo.UName }, { "@UID", loginInfo.UPassword } };
改成
string sql = "select * from t_users where USER=:USER and PASS=:PASS";
string[,] UserInfo = { { "Uname", loginInfo.UName }, { "UID", loginInfo.UPassword } };
试试
下载cx_Oracle,下载之后就可以使用了。
简单的使用流程如下:
1.引用模块cx_Oracle2.连接数据库3.获取cursor4.使用cursor进行各种操作5.关闭cursor6.关闭连接
参考代码:
import cx_Oracle #引用模块cx_Oracleconn=cx_Oracle.connect('load/123456@localhost/ora11g') #连接数据库c=conn.cursor() #获取cursorx=c.execute('select sysdate from dual') #使用cursor进行各种操作x.fetchone()c.close() #关闭cursorconn.close() #关闭连接
操作步骤:
1、开始-输入cmd,进入命令提示符。
2、进到C盘根目录
3、输入命令
imp 用户名/密码@数据库实例名 file=load.dmp log=load.log TABLES=(表名)
4、敲入回车,等待导入结束。
提示:步骤3的中文部分,请根据自己数据库的情况进行更改。