存大文件到数据库


图片存入数据库;
InputStream photoStream = new FileInputStream(new File("c:\\blog.jpg"));  
sql = "INSERT INTO testtable  (img) VALUES (?)";  
     
    pstmt = conn.prepareStatement(sql);  
    pstmt.setBinaryStream(1, photoStream, (int) file.length());  
    pstmt.executeUpdate();  

 

大文件操作数据库:插入,更新,取出
 插入:  
  /*  
  *   This   class   is   used   to   INSERT   data   into   a   BLOB   datatype   column   in   an   Oracle8i   database.    
  *   This   class   has   a   method   called   insertBlobData   which   takes   three   input   parameters:  
  *   1)   The   name   of   the   file   to   be   added   to   the   database  
  *   2)   The   description   of   the   file   to   be   added   to   the   database  
  *   3)   The   physical   path   to   the   file,   to   be   added   to   the   database   
     
  /*  
  *   Import   the   required   Java   classes  
  */  
  import   java.io.File;  
  import   java.io.FileInputStream;  
  import   java.io.InputStream;  
  import   java.io.OutputStream;  
  import   java.io.FileNotFoundException;  
  import   java.sql.Connection;  
  import   java.sql.DriverManager;  
  import   java.sql.ResultSet;  
  import   java.sql.Statement;  
  import   java.sql.SQLException;  
  /*  
  *   Import   the   required   Oracle   classes  
  */  
  import   oracle.jdbc.driver.OracleDriver;  
  import   oracle.jdbc.OracleResultSet;  
  import   oracle.sql.BLOB;  
   
  public   class   InsertBlob   {  
   
  public   InsertBlob()   {  
  }  
  public   static   void   main(String[]   args)   {  
  InsertBlob   insertBlob1   =   new   InsertBlob();  
  if(args.length   !=   3)   {  
  System.out.println("Usage:   java   InsertBlob   FileName   FileDescription   FilePath");  
  System.out.println("Example:   java   InsertBlob   myImage.jpg   \"File   description   text   comes   here.\"   \"C:\\\\MyFolder\\\\myImage.jpg\"");  
  }  
  else   {  
  try   {  
  /*  
  *   The   variable   output   will   return   one   of   the   following   values:  
  *   0   -----   Indicates   success.  
  *   1   -----   Indicates   that   the   SELECT   statement   with   the   FOR   UPDATE   clause   could   not   find   a   record.  
  *   2   -----   Indicates   that   file   with   the   same   name   and   description   already   exists   in   the   database.  
  *   3   -----   Indicates   a   SQLException   has   occurred.  
  *   4   -----   Indicates   a   FileNotException   has   occurred.  
  *   5   -----   Indicates   a   some   other   Exception   has   occurred.  
  *   6   -----   Indicates   an   error   has   occurred   in   the   finally   block.  
  */  
  final   int   output   =   insertBlob1.insertBlobData(args[0],   args[1],   args[2]);  
  System.out.println(output);  
  }  
  catch(Exception   e)   {  
  e.printStackTrace();  
  }  
  finally   {  
  insertBlob1   =   null;  
  }  
  }  
  }  
   
  private   static   int   insertBlobData(final   String   fileName,   final   String   fileDescription,   final   String   filePath)   {  
  /*  
  *   Initialize   the   necessary   parameters  
  */  
  int   returnValue   =   0;  
  Connection   conn   =   null;  
  Statement   stmt   =   null;  
  ResultSet   rs   =   null;  
  InputStream   is   =   null;  
  OutputStream   os   =   null;  
  String   query   =   null;  
  try   {  
    /*    
  *   Register   the   Oracle   driver    
  */  
  DriverManager.registerDriver(new   OracleDriver());  
  /*  
  *   Establish   a   connection   to   the   Oracle   database.   I   have   used   the   Oracle   Thin   driver.  
  *   jdbc:oracle:thin@host:port:sid,   "user   name",   "password"  
  */  
  conn   =   DriverManager.getConnection("jdbc:oracle:thin:@visions-bwckzjd:1521:o8i",   "internal",   "oracle");  
  /*  
  *   Set   auto   commit   to   false,   it   helps   to   speed   up   things,   by   default   JDBC's   auto   commit   feature   is   on.  
  *   This   means   that   each   SQL   statement   is   commited   as   it   is   executed.  
  */  
  conn.setAutoCommit(false);  
  stmt   =   conn.createStatement();  
  /*  
  *   First   execute   a   query   to   see   if   a   file   with   the   same   name   and   description   already   exists.  
  */  
  query   =   "SELECT   FileId   FROM   tblBlobDemo   WHERE   FileName=\'"   +   fileName   +   "\'   AND   FileDescription=\'"   +   fileDescription   +   "\'   ORDER   BY   FileId   DESC";  
  rs   =   stmt.executeQuery(query);  
  if(!rs.next())   {  
  /*  
  *   Insert   all   the   data,   for   the   BLOB   column   we   use   the   function   empty_blob(),   which   creates   a   locator   for   the   BLOB   datatype.  
  *   A   locator   is   an   object   that   ponts   to   the   actual   location   of   the   BLOB   data   in   the   database.   A   locator   is   essential   to   manipulate   BLOB   data.    
  */  
  query   =   "INSERT   INTO   tblBlobDemo   VALUES(seqFileId.NextVal,     sysdate,   \'"   +   fileName   +   "\',   empty_blob(),   \'"   +   fileDescription   +   "\')";  
  stmt.execute(query);  
  /*  
  *   Once   the   locator   has   been   inserted,   we   retrieve   the   locator   by   executing   a   SELECT   statement   with   the   FOR   UPDATE   clause   to   manually   lock   the   row.  
  */  
  query   =     "SELECT   FileData   FROM   tblBlobDemo   WHERE   FileName=\'"   +   fileName   +   "\'   AND   FileDescription=\'"   +   fileDescription   +    
    "\'   ORDER   BY   FileId   DESC   FOR   UPDATE";  
  rs   =   stmt.executeQuery(query);  
  if(rs.next())   {  
  /*  
  *   Once   a   locator   has   been   retrieved   we   can   use   it   to   insert   the   binary   data   into   the   database.  
  */  
  BLOB   blob   =   ((OracleResultSet)rs).getBLOB("FileData");  
  os   =   blob.getBinaryOutputStream();  
  final   File   f   =   new   File(filePath);  
  is   =   new   FileInputStream(f);  
  final   byte[]   buffer   =   new   byte[blob.getBufferSize()];  
  int   bytesRead   =   0;  
  while((bytesRead   =   is.read(buffer))   !=   -1)   {  
  os.write(buffer,   0,   bytesRead);  
  }  
  blob   =   null;  
  }  
  else   {  
  returnValue   =   1;  
  }  
  }  
  else   {  
  returnValue   =   2;  
  }  
  }  
  catch(SQLException   e)   {  
  returnValue   =   3;  
  e.printStackTrace();  
  }  
  catch(FileNotFoundException   e)   {  
  returnValue   =   4;  
  e.printStackTrace();  
  }  
  catch(Exception   e)   {  
  returnValue   =   5;  
  e.printStackTrace();  
  }  
  finally   {  
  /*  
  *   Clean   up.  
  */  
  try   {  
  if(is   !=   null)   {  
  is.close();  
  }  
  if(os   !=   null)   {  
  os.flush();  
  os.close();  
  }  
  if(stmt   !=   null)   {  
  stmt.close();  
  }  
  if(rs   !=   null)   {  
  rs.close();  
  }  
  if(conn   !=   null)   {  
  conn.commit();  
  conn.close();  
  }  
  is   =   null;  
  os   =   null;  
  stmt   =   null;  
  rs   =   null;  
  conn   =   null;  
  query   =   null;  
  }  
  catch(Exception   e)   {  
  returnValue   =   6;  
  e.printStackTrace();  
  }  
  }  
  return   returnValue;  
  }  
  }
Top

 

 

更新:  
   
  /*  
  *   This   class   is   used   to   UPDATE   a   BLOB   datatype   in   an   Oracle8i   database.    
  *   This   class   has   a   method   called   updateBlobData   which   takes   four   input   parameters:  
  *   1)   The   file-id   of   the   file   to   be   updated   in   the   database  
  *   2)   The   name   of   the   new   file   to   be   added   to   the   database  
  *   3)   The   description   of   the   new   file   to   be   added   to   the   database  
  *   4)   The   physical   path   to   the   new   file,   to   be   added   to   the   database   
    */  
   
  /*  
  *   Import   the   required   Java   classes  
  */  
  import   java.io.File;  
  import   java.io.FileInputStream;  
  import   java.io.InputStream;  
  import   java.io.OutputStream;  
  import   java.io.FileNotFoundException;  
  import   java.sql.Connection;  
  import   java.sql.DriverManager;  
  import   java.sql.ResultSet;  
  import   java.sql.Statement;  
  import   java.sql.SQLException;  
  /*  
  *   Import   the   required   Oracle   classes  
  */  
  import   oracle.jdbc.driver.OracleDriver;  
  import   oracle.jdbc.OracleResultSet;  
  import   oracle.sql.BLOB;  
   
  public   class   UpdateBlob   {  
   
  public   UpdateBlob()   {  
  }  
  public   static   void   main(String[]   args)   {  
  UpdateBlob   updateBlob1   =   new   UpdateBlob();  
  if(args.length   !=   4)   {  
  System.out.println("Usage:   java   UpdateBlob   FileId   NewFileName   NewFileDescription   NewFilePath");  
  System.out.println("Example:   java   UpdateBlob   1   myNewImage.jpg   \"New   file   description   text   comes   here.\"   \"C:\\\\MyFolder\\\\myNewImage.jpg\"");  
  }  
  else   {  
  try   {  
  /*  
  *   The   variable   output   will   return   one   of   the   following   values:  
  *   0   -----   Indicates   success.  
  *   1   -----   Indicates   that   the   SELECT   statement   with   the   FOR   UPDATE   clause   could   not   find   a   record.  
  *   2   -----   Indicates   that   the   FileName   and   FileDescription   columns   could   not   be   updated.  
  *   3   -----   Indicates   a   SQLException   has   occurred.  
  *   4   -----   Indicates   a   FileNotException   has   occurred.  
  *   5   -----   Indicates   a   some   other   Exception   has   occurred.  
  *   6   -----   Indicates   an   error   has   occurred   in   the   finally   block.  
  */  
  final   int   output   =   updateBlob1.updateBlobData(args[0],   args[1],   args[2],   args[3]);  
  System.out.println(output);  
  }  
  catch(Exception   e)   {  
  e.printStackTrace();  
  }  
  finally   {  
  updateBlob1   =   null;  
  }  
  }  
  }  
   
  private   static   int   updateBlobData(final   String   fileId,   final   String   fileName,   final   String   fileDescription,   final   String   filePath)   {  
  /*  
  *   Initialize   the   necessary   parameters  
  */  
  int   returnValue   =   0;  
  Connection   conn   =   null;  
  Statement   stmt   =   null;  
  ResultSet   rs   =   null;  
  InputStream   is   =   null;  
  OutputStream   os   =   null;  
  String   query   =   null;  
  try   {  
    /*    
  *   Register   the   Oracle   driver    
  */  
  DriverManager.registerDriver(new   OracleDriver());  
  /*  
  *   Establish   a   connection   to   the   Oracle   database.   I   have   used   the   Oracle   Thin   driver.  
  *   jdbc:oracle:thin@host:port:sid,   "user   name",   "password"  
  */  
  conn   =   DriverManager.getConnection("jdbc:oracle:thin:@visions-bwckzjd:1521:o8i",   "internal",   "oracle");  
  /*  
  *   Set   auto   commit   to   false,   it   helps   to   speed   up   things,   by   default   JDBC's   auto   commit   feature   is   on.  
  *   This   means   that   each   SQL   statement   is   commited   as   it   is   executed.  
  */  
  conn.setAutoCommit(false);  
  stmt   =   conn.createStatement();  
  /*  
  *   First   execute   a   query   to   update   the   FileName,   FileDescription   and   the   FileData   columns.  
  */  
  query   =   "UPDATE   tblBlobDemo   SET   FileName=\'"   +   fileName   +   "\',   FileDescription=\'"   +   fileDescription   +   "\',   FileData=empty_blob()   WHERE   FileId="   +   fileId;  
  final   int   numberOfRecordsUpdated   =   stmt.executeUpdate(query);  
  if(numberOfRecordsUpdated   ==   1)   {  
  /*  
  *   Updating   a   BLOB   datatype   in   a   database   involves   replacing   an   entire   BLOB   and   not   modifying   it   in   place.  
  *   Since   a   locator   has   already   been   inserted   for   the   BLOB   datatype   using   the   InsertBlob   class.  
  *   We   retrieve   the   locator   by   executing   a   SELECT   statement   with   the   FOR   UPDATE   clause   to   manually   lock   the   row.  
  */  
  query   =     "SELECT   FileData   FROM   tblBlobDemo   WHERE   FileId="     +   fileId   +   "   FOR   UPDATE";  
  rs   =   stmt.executeQuery(query);  
  if(rs.next())   {  
  /*  
  *   Once   a   locator   has   been   retrieved   we   can   use   it   to   insert   the   binary   data   into   the   database.  
  */  
  BLOB   blob   =   ((OracleResultSet)rs).getBLOB("FileData");  
  os   =   blob.getBinaryOutputStream();  
  final   File   f   =   new   File(filePath);  
  is   =   new   FileInputStream(f);  
  final   byte[]   buffer   =   new   byte[blob.getBufferSize()];  
  int   bytesRead   =   0;  
  while((bytesRead   =   is.read(buffer))   !=   -1)   {  
  os.write(buffer,   0,   bytesRead);  
  }  
  blob   =   null;  
  }  
  else   {  
  returnValue   =   1;  
  }  
  }  
  else   {  
  returnValue   =   2;  
  }  
  }  
  catch(SQLException   e)   {  
  returnValue   =   3;  
  e.printStackTrace();  
  }  
  catch(FileNotFoundException   e)   {  
  returnValue   =   4;  
  e.printStackTrace();  
  }  
  catch(Exception   e)   {  
  returnValue   =   5;  
  e.printStackTrace();  
  }  
  finally   {  
  /*  
  *   Clean   up.  
  */  
  try   {  
  if(is   !=   null)   {  
  is.close();  
  }  
  if(os   !=   null)   {  
  os.flush();  
  os.close();  
  }  
  if(stmt   !=   null)   {  
  stmt.close();  
  }  
  if(rs   !=   null)   {  
  rs.close();  
  }  
  if(conn   !=   null)   {  
  conn.commit();  
  conn.close();  
  }  
  is   =   null;  
  os   =   null;  
  stmt   =   null;  
  rs   =   null;  
  conn   =   null;  
  query   =   null;  
  }  
  catch(Exception   e)   {  
  returnValue   =   6;  
  e.printStackTrace();  
  }  
  }  
  return   returnValue;  
  }  
  }
Top

 

  取出:
    
  /*  
  *   This   class   is   used   to   select   a   BLOB   datatype   from   an   Oracle8i   database   onto   the   file   system.    
  *   This   class   has   a   method   called   selectBlobData   which   takes   two   input   parameters:  
  *   1)   The   file-id   of   the   file   to   be   extracted   from   the   database  
  *   2)   The   physical   path   to   which   the   file   must   be   extracted.     

  */  
   
  /*  
  *   Import   the   required   Java   classes  
  */  
  import   java.io.File;  
  import   java.io.FileOutputStream;  
  import   java.io.InputStream;  
  import   java.io.OutputStream;  
  import   java.io.FileNotFoundException;  
  import   java.sql.Connection;  
  import   java.sql.DriverManager;  
  import   java.sql.ResultSet;  
  import   java.sql.Statement;  
  import   java.sql.SQLException;  
  /*  
  *   Import   the   required   Oracle   classes  
  */  
  import   oracle.jdbc.driver.OracleDriver;  
  import   oracle.jdbc.OracleResultSet;  
  import   oracle.sql.BLOB;  
   
  public   class   SelectBlob   {  
   
  public   SelectBlob()   {  
  }  
   
  public   static   void   main(String[]   args)   {  
  SelectBlob   selectBlob1   =   new   SelectBlob();  
  if(args.length   !=   2)   {  
  System.out.println("Usage:   java   SelectBlob   FileId   FilePath");  
  System.out.println("Example:   java   SelectBlob   1   \"C:\\\\MyFolder\\\\\"");  
  }  
  else   {  
  try   {  
  /*  
  *   The   variable   output   will   return   one   of   the   following   values:  
  *   0   -----   Indicates   success.  
  *   1   -----   Indicates   that   the   SELECT   statement   could   not   find   a   record.  
  *   2   -----   Indicates   a   SQLException   has   occurred.  
  *   3   -----   Indicates   a   FileNotException   has   occurred.  
  *   4   -----   Indicates   a   some   other   Exception   has   occurred.  
  *   5   -----   Indicates   an   error   has   occurred   in   the   finally   block.  
  */  
  final   int   output   =   selectBlob1.selectBlobData(args[0],   args[1]);  
  System.out.println(output);  
  }  
  catch(Exception   e)   {  
  e.printStackTrace();  
  }  
  finally   {  
  selectBlob1   =   null;  
  }  
  }  
  }  
   
  private   static   int   selectBlobData(final   String   fileId,   final   String   path)   {  
  /*  
  *   Initialize   the   necessary   parameters  
  */  
  int   returnValue   =   0;  
  Connection   conn   =   null;  
  Statement   stmt   =   null;  
  ResultSet   rs   =   null;  
  InputStream   is   =   null;  
  OutputStream   os   =   null;  
  BLOB   blob   =   null;  
  try   {  
  final   String   query   =   "SELECT   FileName,   FileData   FROM   tblBlobDemo   WHERE   FileId   =   "   +   fileId;  
    /*    
  *   Register   the   Oracle   driver    
  */  
  DriverManager.registerDriver(new   OracleDriver());  
  /*  
  *   Establish   a   connection   to   the   Oracle   database.   I   have   used   the   Oracle   Thin   driver.  
  *   jdbc:oracle:thin@host:port:sid,   "user   name",   "password"  
  */  
  conn   =   DriverManager.getConnection("jdbc:oracle:thin:@visions-bwckzjd:1521:o8i",   "internal",   "oracle");  
  /*  
  *   Set   auto   commit   to   false,   it   helps   to   speed   up   things,   by   default   JDBC's   auto   commit   feature   is   on.  
  *   This   means   that   each   SQL   statement   is   commited   as   it   is   executed.  
  */  
  conn.setAutoCommit(false);  
  stmt   =   conn.createStatement();  
  /*  
  *   Execute   the   SELECT   statement  
  */  
  rs   =   stmt.executeQuery(query);  
  if(rs.next())   {  
  /*  
  *   Extract   the   BLOB   data   to   a   file   on   the   local   file   system.  
  */  
  blob   =   ((OracleResultSet)rs).getBLOB("FileData");  
  is   =   blob.getBinaryStream();  
  final   String   fileName   =   rs.getString("FileName");  
  final   String   filePath   =   path   +   fileName;  
  os   =   new   FileOutputStream(filePath);  
  final   int   bufferSize   =   blob.getBufferSize();  
  final   byte[]   buffer   =   new   byte[bufferSize];  
  int   bytesRead   =   0;  
  while   ((bytesRead   =   is.read(buffer))   !=   -1)   {  
  os.write(buffer,   0,   bytesRead);  
  }  
  }  
  else   {  
  returnValue   =   1;  
  }  
  }  
  catch(SQLException   e)   {  
  returnValue   =   2;  
  e.printStackTrace();  
  }  
  catch(FileNotFoundException   e)   {  
  returnValue   =   3;  
  e.printStackTrace();  
  }  
  catch(Exception   e)   {  
  returnValue   =   4;  
  e.printStackTrace();  
  }  
  finally   {  
  /*  
  *   Clean   up.  
  */  
  try   {  
  if(is   !=   null)   {  
  is.close();  
  }  
  if(os   !=   null)   {  
  os.flush();  
  os.close();  
  }  
  if(stmt   !=   null)   {  
  stmt.close();  
  }  
  if(rs   !=   null)   {  
  rs.close();  
  }  
  if(conn   !=   null)   {  
  conn.commit();  
  conn.close();  
  }  
  is   =   null;  
  os   =   null;  
  stmt   =   null;  
  rs   =   null;  
  conn   =   null;  
  blob   =   null;  
  }  
  catch(Exception   e)   {  
  returnValue   =   5;  
  e.printStackTrace();  
  }  
  }  
  return   returnValue;  
  }  
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值