|
表结构
create table T_IMAGE
(
ID NUMBER,
TITLE VARCHAR2(10),
IMAGE BLOB
)
存储过程
CREATE OR REPLACE PROCEDURE SAVE_BLOB_IMAGE2(
PC_TITLE IN VARCHAR2,
PB_IMAGE OUT BLOB
) as
BEGIN
INSERT INTO t_image(id,title,image) values(autoid.nextval,PC_TITLE,empty_blob()) //autoid,自增长序列
RETURNING image INTO PB_IMAGE;
END;
package test;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;
import oracle.sql.BLOB;
public class Test {
public static void main(String[] args) {
String file = "E:/my/xiangpian/SNV32892.JPG";
byte[] data = getBytesFromFile(new File(file));
saveImageUseProc(data, "标题");
}
public static byte[] getBytesFromFile(File f) {
if (f == null) {
return null;
}
try {
FileInputStream stream = new FileInputStream(f);
ByteArrayOutputStream out = new ByteArrayOutputStream(1000);
byte[] b = new byte[1000];
int n;
while ((n = stream.read(b)) != -1)
out.write(b, 0, n);
stream.close();
out.close();
return out.toByteArray();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static Integer saveImageUseProc(byte[] data, String title) {
BLOB blob = null;
OutputStream outStream;
Connection conn = getConnection();
try {
conn.setAutoCommit(false);
String call = "{call SAVE_BLOB_IMAGE2(?,?)}";// 调用语句
CallableStatement proc = conn.prepareCall(call);// 调用存储过程
proc.setString(1, title);
proc.registerOutParameter(2, Types.BLOB);
proc.execute();
blob = (BLOB) proc.getBlob(2);
outStream = blob.getBinaryOutputStream();
outStream.write(data, 0, data.length);
outStream.flush();
outStream.close();
proc.close();
conn.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}
public static Connection getConnection() {
String driver = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, "test", "test");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException ex) {
ex.printStackTrace();
}
return conn;
}
}
|
|
|