使用EXTJS与JAVA对Oracle中blob类型图片进行存取
背景
因为项目需要,对Oracle数据库中的Blob类型照片进行存储和展示,经过多次试验并且结合网上查阅的资料,取得了一定的阶段性成果,特地回顾整理下来,方便其他朋友参考,也方便自己以后查阅。
开发环境已经语言
在Netbeans环境下进行开发,前台界面使用Extjs,后台开发使用Java语言的Servlet
过程以及实例
图片存储:
使用的是客户端本地存储的图片,上传到后台服务器上的Oracle数据库中存储起来
参考代码:
response.setContentType("text/html;charset=UTF-8");
try {
Connection conn;
Statement stmt;
ResultSet rs;
int bufferSize;
String connectString;
Class.forName("oracle.jdbc.driver.OracleDriver");
connectString = "jdbc:oracle:thin:@数据库IP地址:1521:Orcl";
conn = (OracleConnection) DriverManager.getConnection(connectString, "用户名", "密码");
stmt = conn.createStatement();
File f = new File("c:\\a.jpg");//图片在客户端的地址
InputStream fis = new FileInputStream(f);
OutputStream out = null;
BufferedInputStream in = null;
try {
conn.setAutoCommit(false);//这句很关键,先不要提交
stmt.executeUpdate("insert into 数据库表名 values3,empty_blob(),3999999,sysdate)");//在Oracle数据库中一定要先插入一个空的blob数据empty_blob(),然后用下面的语句进行更新
rs = stmt.executeQuery("select * from数据库表名where customerseq= and rownum<=1 for update");
if (rs.next()) {
Blob blob = rs.getBlob("photo");
out = ((oracle.sql.BLOB) blob).getBinaryOutputStream();
bufferSize = ((oracle.sql.BLOB) blob).getBufferSize();
in = new BufferedInputStream(fis, bufferSize);
byte[] b = new byte[bufferSize];
int count = in.read(b, 0, bufferSize);
while (count != -1)
{
out.write(b, 0, count);
count = in.read(b, 0, bufferSize);
}
out.close();
out = null;
in.close();
in = null;
mit();