整個流程分為四步,連接oracle數(shù)據(jù)庫 - 讀取blob圖片字段 - 對圖片進行縮放 -把圖片展示在jsp頁面上。
為元寶等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及元寶網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站制作、成都網(wǎng)站建設、元寶網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!
下面進行詳細描述:
1. java連接Oracle
注:數(shù)據(jù)庫是Oracle10g版本為10.2.0, 在數(shù)據(jù)庫中,圖片字段類型為BLOB。
java中通常使用的是通過jdbc驅動來連接數(shù)據(jù)庫,oracle也不例外,因此必須下載一個Oracle驅動的jdbc需要去網(wǎng)上進行下載,名稱為 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里的表空間
//從配置文件中讀取數(shù)據(jù)庫信息
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("請檢測配置文件中的數(shù)據(jù)庫信息是否正確." );
}
return this.myConnection;
}
}
2. 讀取blob字段
在OracleQueryBean類中增加一個函數(shù),來進行讀取,具體代碼如下:
/**
* 根據(jù)圖片在數(shù)據(jù)庫中的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("獲取圖片數(shù)據(jù)失敗,原因:" + 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. 縮放圖片
因為圖片的大小可能不一致,但是在頁面中輸出的大小需要統(tǒng)一,所以需要
在OracleQueryBean類中增加一個函數(shù),來進行縮放,具體代碼如下:
/**
* 縮小或放大圖片
* @param data 圖片的byte數(shù)據(jù)
* @param w 需要縮到的寬度
* @param h 需要縮到高度
* @return 縮放后的圖片的byte數(shù)據(jù)
*/
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字節(jié)
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bid, "jpeg", baos);
newdata = baos.toByteArray();
}catch(IOException e){
e.printStackTrace();
}
return newdata;
}
4. 展示在頁面
頁面使用OracleQueryBean來根據(jù)用戶提供的圖片id進行查詢,在讀取并進行縮放后,通過jsp頁面進行展示,具體代碼如下:
%@ page language="java" contentType="text/html;;charset=gbk" %
jsp:useBean id="OrcleQuery" scope="page" class="HLFtiDemo.OracleQueryBean" /
%
response.setContentType("image/jpeg");
//圖片在數(shù)據(jù)庫中的 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數(shù)據(jù)
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里的表空間
//從配置文件中讀取數(shù)據(jù)庫信息
GetPara oGetPara = new GetPara();
這文章確實寫的不錯,你可以看原文
1. 獲得遠程數(shù)據(jù)庫的tns信息和要訪問的對象的擁有者及其密碼
2.創(chuàng)建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;
樓主你好!根據(jù)你的描述,讓我來給你回答!
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.連接數(shù)據(jù)庫3.獲取cursor4.使用cursor進行各種操作5.關閉cursor6.關閉連接
參考代碼:
import cx_Oracle ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#引用模塊cx_Oracleconn=cx_Oracle.connect('load/123456@localhost/ora11g') ? ?#連接數(shù)據(jù)庫c=conn.cursor() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #獲取cursorx=c.execute('select sysdate from dual') ? ? ? ? ? ? ? ? ? #使用cursor進行各種操作x.fetchone()c.close() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #關閉cursorconn.close() ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#關閉連接
操作步驟:
1、開始-輸入cmd,進入命令提示符。
2、進到C盤根目錄
3、輸入命令
imp 用戶名/密碼@數(shù)據(jù)庫實例名 file=load.dmp log=load.log TABLES=(表名)
4、敲入回車,等待導入結束。
提示:步驟3的中文部分,請根據(jù)自己數(shù)據(jù)庫的情況進行更改。