starbhhc 发表于 2013-1-28 18:46:46

使用JDBC处理二进制数据

/*   

Database Programming with JDBC and Java, Second Edition   
By George Reese   
ISBN: 1-56592-616-1   

Publisher: O'Reilly   

*/   
   
   
import java.io.BufferedOutputStream;   
import java.io.File;   
import java.io.FileInputStream;   
import java.io.FileOutputStream;   
import java.sql.Blob;   
import java.sql.Connection;   
import java.sql.DriverManager;   
import java.sql.PreparedStatement;   
import java.sql.ResultSet;   
   
/**   
* Example 4.2.   
*/   
public class Blobs {   
public static void main(String args[]) {   
    if (args.length != 1) {   
      System.err.println("Syntax: <java Blobs "   
          + " ");   
      return;   
    }   
    try {   
      Class.forName(args).newInstance();   
      Connection con = DriverManager.getConnection(args, args,   
          args);   
      File f = new File(args);   
      PreparedStatement stmt;   
   
      if (!f.exists()) {   
      // if the file does not exist   
      // retrieve it from the database and write it to the named file   
      ResultSet rs;   
   
      stmt = con.prepareStatement("SELECT blobData "   
            + "FROM BlobTest " + "WHERE fileName = ?");   
   
      stmt.setString(1, args);   
      rs = stmt.executeQuery();   
      if (!rs.next()) {   
          System.out.println("No such file stored.");   
      } else {   
          Blob b = rs.getBlob(1);   
          BufferedOutputStream os;   
   
          os = new BufferedOutputStream(new FileOutputStream(f));   
          os.write(b.getBytes(0, (int) b.length()), 0, (int) b   
            .length());   
          os.flush();   
          os.close();   
      }   
      } else {   
      // otherwise read it and save it to the database   
      FileInputStream fis = new FileInputStream(f);   
      byte[] tmp = new byte;   
      byte[] data = null;   
      int sz, len = 0;   
   
      while ((sz = fis.read(tmp)) != -1) {   
          if (data == null) {   
            len = sz;   
            data = tmp;   
          } else {   
            byte[] narr;   
            int nlen;   
   
            nlen = len + sz;   
            narr = new byte;   
            System.arraycopy(data, 0, narr, 0, len);   
            System.arraycopy(tmp, 0, narr, len, sz);   
            data = narr;   
            len = nlen;   
          }   
      }   
      if (len != data.length) {   
          byte[] narr = new byte;   
   
          System.arraycopy(data, 0, narr, 0, len);   
          data = narr;   
      }   
      stmt = con.prepareStatement("INSERT INTO BlobTest(fileName, "   
            + "blobData) VALUES(?, ?)");   
      stmt.setString(1, args);   
      stmt.setObject(2, data);   
      stmt.executeUpdate();   
      f.delete();   
      }   
      con.close();   
    } catch (Exception e) {   
      e.printStackTrace();   
    }   
}   
}
页: [1]
查看完整版本: 使用JDBC处理二进制数据