package com.test;
import java.nio.ByteBuffer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class WriteBLOB {
private Connection conn = null;
private final static String PSQL = "insert into TESTBLOB(NUMCONTENTID,BLOBCONTENT) "
+ "values(?,EMPTY_BLOB())";
private final static String SSQL = "select BLOBCONTENT from TESTBLOB where NUMCONTENTID = ? for update";
private final static String USQL = "update TESTBLOB set BLOBCONTENT = ? where NUMCONTENTID = ?";
// public static String SQL_BLOBID = "select TESTBLOB_SEQ.nextVal from dual";
public WriteBLOB() throws Exception {
Connection conn = null;
try {
conn = getConnection();
conn.setAutoCommit(false);
ByteBuffer bb = ByteBuffer.allocate(10836);
bb.position(0);
bb.putInt(1);
//調用 insertBLOB 方法 的contentid 應該使用序列這裏爲了簡單就直接寫死了
//下面的插入方式應該是你想要的方法 在數據庫中會看到 0000 0001 0000 0000 0000....
//但是你這裏好像沒有真正的是用 ByteBuffer
byte [] b1 = bb.array();
insertBLOB(conn, 1, b1);
//下面是使用 ByteBuffer 後的插入 在數據庫中會看到 0000 0001
//不知道你想要什麼樣子的,你自己選擇不吧
bb.flip();
byte [] b2 = new byte [bb.remaining()];
bb.get(b2);
insertBLOB(conn, 2, b2);
} catch (Exception ex) {
ex.printStackTrace();
conn.rollback();
} finally {
if (conn != null)
conn.close();
}
}
public void insertBLOB(Connection conn, int contentid, byte[] content)
throws Exception {
PreparedStatement pstmt = null;
PreparedStatement pstmt2 = null;
int id = contentid;
try {
pstmt = conn.prepareStatement(PSQL);
pstmt2 = conn.prepareStatement(USQL);
pstmt.setInt(1, id);
try {
pstmt.executeUpdate();//在數據庫中插入空對象
} catch (SQLException ex) {
ex.printStackTrace();
}
pstmt = conn.prepareStatement(SSQL);
pstmt.setInt(1, id);
ResultSet rs = pstmt.executeQuery();//查詢新插入的記錄
oracle.sql.BLOB pc = null;
while (rs.next()) {
pc = (oracle.sql.BLOB) rs.getBlob(1);
}
byte[] data = content;
pc.putBytes(1, data);
pstmt2.setBlob(1, pc);
pstmt2.setInt(2, id);
pstmt2.executeUpdate();
} finally {
try {
pstmt.close();
pstmt2.close();
} catch (Exception EE) {
}
}
return;
}
public static Connection getConnection() throws Exception {
Connection conn = null;
Statement stmtTemp = null;
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.1.26:1521:orcl", "oracl", "123456");
stmtTemp = conn.createStatement();
return conn;
}
public static void main(String[] args) {
try {
WriteBLOB wb = new WriteBLOB();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
java 向數據庫ORACLE寫BLOB
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.