java中大字段

转载 2006年06月13日 17:24:00

 

Oracle中的lob (Large Object)可以存储非常大的数据(可能是4GB),这样就可以通过将文件或其它任何对象序列化成字节输出流(OutputStream)后写入数据库,之后使用字节输入流(InputStream)将数据读出然后反序列化为原始文件或对象。操作时需要使用oracle的JDBC包,它扩展了sun的JDBC包中的Blob对象。同时需要注意一些细节。下面的代码演示如何使用blob(实例中需要Oracle的JDBC包)。

import oracle.jdbc.OracleResultSet;  // 使用Oracle的ResultSet对象
import oracle.sql.BLOB; 
// 使用Oracle的BLOB对象,而不是sun的Blob

...

try{
  Connection conn=<数据库连接>;
  File file=<存入数据库的文件对象>;
  
conn.setAutoCommit(false);  // 取消Connection对象的auto commit属性
  String file_name=file.getName();

  // 数据库中有一个item表,其中的file_name (varchar2)存储文件名,file_blob (blob)存储文件对象
  String sql="INSERT INTO item (file_name,file_blob) VALUES ('" + file_name + "',EMPTY_BLOB())"; 
// 使用“EMPTY_BLOB()“成生一个空blob
  Statement stmt=conn.createStatement();
  int count=stmt.executeUpdate(sql);
  
  sql="SELECT file_blob FROM item WHERE iid='" + iid + "' FOR UPDATE";  // 使用“FOR UPDATE”得到表的写锁
  ResultSet rs=stmt.executeQuery(sql);
  rs.next();
  BLOB blob=((OracleResultSet)rs).getBLOB("file_blob");  // 得到BLOB对象
  OutputStream out=blob.getBinaryOutputStream();  // 建立输出流
  InputStream in=new FileInputStream(file);  // 建立输入流
  int size=blob.getBufferSize();
  byte[] buffer=new byte[size];  // 建立缓冲区
  int len;
  while((len=in.read(buffer)) != -1)
    out.write(buffer,0,len);
  in.close();
  out.close();

  conn.commit();
}
catch(Exception ex){
  try{
    conn.rollback();
  }
  catch(SQLException sqle){
    System.err.println(sqle.getMessage());
  }
}

如果要读出文件的话只需调用BLOB的getBinaryStream()生成一个输入流,再写入一个文件就行了。

 

JAVA中大整数的的一些函数的使用

public class BigInteger extends Number 不变的任意精度的整数。 在所有的操作中 BigIntegers 看起来好象是用二进制补码(类似 Java 的基本整数类...

JAVA导出数据到excel中大数据量的解决方法

web项目中需要有将数据导出excel的操作需求。曾经尝试过几种方法: 1、poi导出到excel 他是操作对象然后将结果写到excel中。 2、拼excel的html形式文件,将文...

JAVA导出数据到excel中大数据量的解决方法

web项目中需要有将数据导出excel的操作需求。曾经尝试过几种方法: 1、poi导出到excel 他是操作对象然后将结果写到excel中。 2、拼excel的html形式文件,将文件扩展名改为xls...

JAVA导出数据到excel中大数据量的解决方法——续

之前写了个大数据导入excel的方法,将大数据拆分成多个excel文件,再打包。有人提出能不能放在一个excel文件分成多个sheet。后来也写了实现,一直没贴出来。 首先接口还是那个接口 imp...

java将金额转换为汉语中大写

做这个应用,源于突然的一个想法:看到发票上面的数字要转换成汉语中人民币的大写 于是就有了下面的这些事儿..... 先看看运行效果: ===...

ACM-Java中大数的应用

BigInteger: BigInteger a,b,c; //定义; a=BigInteger.ZERO; //0; b=BigInteger.ONE; //1; c=BigInte...

java 大文件 多字段排序

  • 2014年12月29日 07:42
  • 28KB
  • 下载

通过java反射获取任意对象的字段名及字段值

import java.lang.reflect.Field; public class ReflectClass3 { /** * @param args */ public sta...
  • CTLLIN
  • CTLLIN
  • 2014年05月09日 00:30
  • 23141
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中大字段
举报原因:
原因补充:

(最多只允许输入30个字)