|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大.oracleOracle中的lob(LargeObject)能够存储十分年夜的数据(多是4GB),如许就能够经由过程将文件或别的任何对象序列化成字节输入流(OutputStream)后写进数据库,以后利用字节输出流(InputStream)将数据读出然后反序列化为原始文件或对象。操纵时必要利用oracle的JDBC包,它扩大了sun的JDBC包中的Blob对象。同时必要注重一些细节。上面的代码演示怎样利用blob(实例中必要Oracle的JDBC包)。
importoracle.jdbc.OracleResultSet;//利用Oracle的ResultSet对象
importoracle.sql.BLOB;//利用Oracle的BLOB对象,而不是sun的Blob
...
try{
Connectionconn=<数据库毗连>;
Filefile=<存进数据库的文件对象>;
conn.setAutoCommit(false);//作废Connection对象的autocommit属性
Stringfile_name=file.getName();
//数据库中有一个item表,个中的file_name(varchar2)存储文件名,file_blob(blob)存储文件对象
Stringsql="INSERTINTOitem(file_name,file_blob)VALUES("+file_name+",EMPTY_BLOB())";//利用“EMPTY_BLOB()“成生一个空blob
Statementstmt=conn.createStatement();
intcount=stmt.executeUpdate(sql);
sql="SELECTfile_blobFROMitemWHEREiid="+iid+"FORUPDATE";//利用“FORUPDATE”失掉表的写锁
ResultSetrs=stmt.executeQuery(sql);
rs.next();
BLOBblob=((OracleResultSet)rs).getBLOB("file_blob");//失掉BLOB对象
OutputStreamout=blob.getBinaryOutputStream();//创建输入流
InputStreamin=newFileInputStream(file);//创建输出流
intsize=blob.getBufferSize();
byte[]buffer=newbyte[size];//创建缓冲区
intlen;
while((len=in.read(buffer))!=-1)
out.write(buffer,0,len);
in.close();
out.close();
conn.commit();
}
catch(Exceptionex){
try{
conn.rollback();
}
catch(SQLExceptionsqle){
System.err.println(sqle.getMessage());
}
}
假如要读出文件的话只需挪用BLOB的getBinaryStream()天生一个输出流,再写进一个文件就好了。
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试) |
|