Oracle Blob

数据库中提供了两种字段类型 Blob  和 Clob 用于存储大型字符串或二进制数据(如图片)。

Blob 采用单字节存储,适合保存二进制数据,如图片文件。
Clob 采用多字节存储,适合保存大型文本数据。

将二进制数据写入Blob
             File photoFile = new File("C:\\temp\\AsianGame\\test.jpeg");
            FileInputStream stream = new FileInputStream(photoFile);
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            byte[] b = new byte[4096];
            int n;
            while ((n = stream.read(b)) != -1)
                out.write(b, 0, n);
            stream.close();
            out.close();
            PhotoTO.setPhotofile(out.toByteArray());

JAVA操作Oracle blob类型
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {
private Connection conn;

/**
* 得到一个数据库的连接
*
* @return 返加Connection对象
*/
public Connection getConnection() {
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:lyx", "scott", "tiger");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}

/**
* 向表中插入图片
*
* @param path图片所在的路径
* @return 整形 判断成功或失败
*/
public int insertImage(String path) throws Exception {
int i = 0;
Statement st = null;
ResultSet rs = null;
conn = this.getConnection();

conn.setAutoCommit(false);// 设置数据库为不自动提交,必须的一步
st = conn.createStatement();
// 先插入一个空对象,这里我调用了Empty_BLOB()函数
i = st
.executeUpdate("insert into image (id,image) values (seq1.nextval,Empty_BLOB())");
// 以行的方式锁定
rs = st
.executeQuery("select image from image where id=(select max(id) from image) for update");
if (rs.next()) {
// 得到流
oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob(1);
// 从得到的低级流构造一个高级流
PrintStream ps = new PrintStream(blob.getBinaryOutputStream());
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(path));
byte[] buff = new byte[1024];
int n = 0;
// 从输入到输出
while ((n = bis.read(buff)) != -1) {
ps.write(buff, 0, n);

}
// 清空流的缓存
ps.flush();
// 关闭流,注意一定要关
ps.close();
bis.close();
}
rs.close();
st.close();
conn.close();
return i;
}

public static void main(String[] args) throws Exception {
Test test = new Test();
test.insertImage("e:\\test.jpg");
System.out.println("OK");

}

}

你可能感兴趣的:(java,oracle,sql,jdbc)