java对oracle中blob字段的操作
来源:互联网 发布:淘宝怎么自定义尺码 编辑:程序博客网 时间:2024/05/16 09:17
写这篇博客之前,我写了关于java操作oracle中clob类行的字段。今天我要写下java操作oracle中blob类型的字段。数据的表结构我如图片所示。里面标记了颜色就是重要的哦 ^_^
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import oracle.jdbc.driver.OracleResultSet;
import oracle.sql.BLOB;
/**
* 本类是对oracle数据库进行增删改查操作
* @author LoongHua
*
*/
public class OperateBlobDao {
private Connection conn;
public static Connection getConnection(){
Connection conn=null;
try {
Class.forName("oracle.jdbc.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.6:1521:findata","system","123456");
} catch (Exception e) {
System.out.println("得到数据库连接发生异常");
e.printStackTrace();
}
return conn;
}
public OperateBlobDao(Connection conn){
this.conn=conn;
}
/**
* 想数据中插入一个2进制文章,如图片
* @param fileName 文件名
* @param filePath 文件路径
* @return 是否插入成功
*/
public boolean insert(String fileName, String filePath) {
if(conn==null){
return false;
}
Statement stmt = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
String query = null;
try {
conn.setAutoCommit(false);
stmt = conn.createStatement();
/*
* 插入所有的数据,插入BLOB字段的列是使用函数empty_blob(),这样系统会创建一个本地化的BLOB数据类型。
*/
query = "insert into aaa(id,name,photo) values (aaa_id.nextval,'"+fileName+"', empty_blob())";
stmt.executeUpdate(query);
/*
*得到刚才插入的记录
*/
query = "select * from aaa where id=(select max(id) from aaa)";
rs = stmt.executeQuery(query);
if (rs.next()) {
// 向BLOB类型变量里插入数据
BLOB blob = ((OracleResultSet)rs).getBLOB("photo");
os = blob.getBinaryOutputStream();
File f = new File(filePath);
is = new FileInputStream(f);
byte[] buffer = new byte[blob.getBufferSize()];
int bytesRead = 0;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.flush();
//清空blob类型
blob = null;
return true;
}
}
catch(Exception e) {
e.printStackTrace();
}
finally {
try {
if(is != null) {
is.close();
}
if(os != null) {
os.close();
}
if(stmt != null) {
stmt.close();
}
if(rs != null) {
rs.close();
}
if(conn != null) {
conn.commit();
}
}
catch(Exception e) {
e.printStackTrace();
}
}
return false;
}
/**
* 用指定的包含文件名的文件路径替换指定名称的文件
* @param fileName 文件名
* @param filePath 包含文件名的文件路径
* @return 是否成功,成功为true,否则为false
*/
public boolean update(String fileName, String filePath){
if(conn==null){
return false;
}
Statement stmt = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
String query = null;
try {
conn.setAutoCommit(false);
stmt = conn.createStatement();
//记得这里一定要加上 for update 不然会报 blob未锁定错误
/*
* 当然也可以用别的方法更新,比如可以先设置photo字段为empty_blob()
* 然后在向blob插入新的数据,就象对clob操作那篇博客那样做也是可以的。
*/
query="select * from aaa where name='"+fileName+"' for update";
rs=stmt.executeQuery(query);
if(rs.next()){
BLOB blob = ((OracleResultSet) rs).getBLOB("photo");
File f = new File(filePath);
is = new FileInputStream(f);
byte[] buffer=new byte[blob.getBufferSize()];
os = blob.getBinaryOutputStream();
int bytesRead = 0;
while((bytesRead=is.read(buffer))!=-1){
os.write(buffer, 0, bytesRead);
}
os.flush();
blob=null;
return true;
}
}catch(Exception e){
e.printStackTrace();
}
finally{
try {
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
if(stmt==null){
stmt.close();
}
if(conn!=null){
conn.commit();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
/**
* 查询指定文件名的一张图片,如果存在则保存到本机的D盘下
* @param fileName 文件名
* @param filePath 包含文件名的文件路径
*/
public void select(String fileName,String filePath){
if(conn==null){
return ;
}
Statement stmt = null;
ResultSet rs = null;
InputStream is = null;
OutputStream os = null;
String query = null;
try {
conn.setAutoCommit(false);
stmt = conn.createStatement();
query="select * from aaa where name='"+fileName+"'";
rs=stmt.executeQuery(query);
if(rs.next()){
BLOB blob = ((OracleResultSet) rs).getBLOB("photo");
File f = new File(filePath);
os = new FileOutputStream(f);
byte[] buffer=new byte[blob.getBufferSize()];
is = blob.getBinaryStream();
int bytesRead = 0;
while((bytesRead=is.read(buffer))!=-1){
os.write(buffer, 0, bytesRead);
}
os.flush();
blob=null;
}
}catch(Exception e){
e.printStackTrace();
}
finally{
try {
if(is!=null){
is.close();
}
if(os!=null){
os.close();
}
if(stmt==null){
stmt.close();
}
if(conn!=null){
conn.setAutoCommit(true);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
/**
* 删除指定的文件名的文件
* @param fileName 指定的文件名
* @return 是否成功,成功为true,否则为false
*/
public boolean delete(String fileName){
if(conn==null){
return false;
}
Statement stmt = null;
String query = null;
try {
conn.setAutoCommit(false);
stmt = conn.createStatement();
query="delete from aaa where name='"+fileName+"'";
int row=stmt.executeUpdate(query);
if(row>0){
return true;
}
}catch(Exception e){
e.printStackTrace();
}
finally{
try {
if(stmt==null){
stmt.close();
}
if(conn!=null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
/**
* 关闭数据库
*/
public void close(){
try {
if(conn!=null){
conn.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Connection conn=getConnection();
OperateBlobDao obdao=new OperateBlobDao(conn);
// boolean flag=obdao.insert("123.JPG", "d:/123.JPG");
// if(flag){
// System.out.println("插入成功!");
// }
// obdao.select("123.JPG", "d:/123.JPG");
// boolean flag=obdao.delete("123.JPG");
// if(flag){
// System.out.println("删除成功!");
// }
boolean flag=obdao.update("xxgz.pdf", "d:/123.JPG");
if(flag){
System.out.println("更新成功!");
}
obdao.close();
}
}
- java对oracle中blob字段的操作
- JAVA对Oracle中BLOB、CLOB类型字段的操作说明
- JAVA对Oracle中BLOB、CLOB类型字段的操作说明
- Oracle中BLOB字段的操作
- 使用java操作oracle的blob字段
- 对oracle中BLOB字段读写的总结
- 对oracle中BLOB字段读写的总结
- Java对Oracle里Blob字段的处理
- Delphi与Oracle中BLOB字段的操作
- Delphi与Oracle中BLOB字段的操作
- Oracle中BLOB和CLOB字段的操作
- Delphi与Oracle中BLOB字段的操作
- java操作oracle数据库中的blob字段
- ORACLE操作BLOB字段
- java操作oracle中blob
- 用hibernate操作oracle的blob字段
- ASP.net 操作 Oracle 的 Blob 字段
- 用sql操作oracle的blob字段
- 程序打包发布时,如何将程序集自动安装到全局程序集缓存(GAC)中
- 常见C语言面试题之一:字符串代替、字符串转换整数
- 写给想当程序员的朋友(转)
- FCKeditor 2.3 在ASP.NET中的设置和使用
- 从0开始做网站
- java对oracle中blob字段的操作
- ERP术语解释及SAP模块介绍
- 常见C语言面试题之二:浮点数转换为字符串
- PPT2Flash Professional 5.1.0.4 绿色特别版
- 在app.config自訂一些配置資訊
- 初学摄影全程38个训练项目
- 常见C语言面试题之三:字符串替代
- 熊晓鸽的赌注人生
- Python 计算器