1.2.3 Java 는 Oracle 의 blob 그림 필드 를 읽 고 표시 합 니 다.
전체 프로 세 스 는 4 단계 로 나 뉘 어 Oacle 데이터 베 이 스 를 연결 합 니 다. -> blob 그림 필드 읽 기 -> 그림 크기 조정 ->그림 을 jsp 페이지 에 전시 하 다.
아래 에 상세 한 설명 을 하 겠 습 니 다.
1. 자바 연결 Oracle
주:데이터 베 이 스 는 Oracle 10g 버 전 10.2.0 입 니 다. 데이터베이스 에서 그림 필드 형식 은 BLOB 입 니 다.
자바 에 서 는 일반적으로 jdbc 구동 을 통 해 데이터 베 이 스 를 연결 하 는 것 을 사용 합 니 다.Oacle 도 예외 가 아 닙 니 다.따라서 Oracle 구동 jdbc 를 다운로드 하려 면 인터넷 에서 다운로드 해 야 합 니 다.이름 은? ojdbc14.jar。
다운로드 주소:
http://www.oracle.com/technology/software/tech/java/sqlj_jdbc/htdocs/jdbc101040.html
드라이버 를 다운로드 한 후 드라이버 에서 제공 하 는 인 터 페 이 스 를 사용 하여 연결 할 수 있 습 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.
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 필드 읽 기
Oracle QueryBean 클래스 에 함 수 를 추가 하여 읽 습 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.
/**
* 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. 그림 크기 조정
그림 의 크기 가 일치 하지 않 을 수 있 지만 페이지 에서 출력 하 는 크기 는 통일 되 어야 하기 때문에 필요 합 니 다.
Oracle Query Bean 클래스 에 함 수 를 추가 하여 크기 를 조정 합 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.
/**
*
* @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. 페이지 에 전시
페이지 는 Oracle QueryBean 을 사용 하여 사용자 가 제공 한 이미지 id 에 따라 조회 하고 읽 고 크기 를 조정 한 후 jsp 페이지 를 통 해 보 여 줍 니 다.구체 적 인 코드 는 다음 과 같 습 니 다.
5. Oracle Query Bean 조회 류 의 전체 코드
Oracle QueryBean.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();
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;
}
/**
* ID
* @param strID ID
* @param w
* @param h
* @return byte
*/
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;
}
/**
* ID ,
* @param strID ID
* @return byte
*/
public byte[] GetImgByteById(String strID){
//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;
data = new byte[nSize];
inStream.read(data);
inStream.close();
} catch (IOException e) {
System.out.println(" , :" + e.getMessage());
}
}
System.out.println(myStringBuffer.toString());
myConnection.commit();
myConnection.close();
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return data;
}
/**
*
* @param data byte
* @param w
* @param h
* @return
*/
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;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 다중 스레드 방법 JOIN 상세 및 실례 코드어떻게 해야만 깊이 파고들 수 있을까, 나의 이해는 문제를 가지고 있는 것이지, 범용적으로 보는 것이 아니다.그래서 이 시리즈는 기본적으로 문제를 해결하는 것을 위주로 한다. 한 마디로 하면 저는 이 시리즈를 통해 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.