使用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 [driver] [url] "  
          + "[uid] [pass] [file]");   
      return;   
    }   
    try {   
      Class.forName(args[0]).newInstance();   
      Connection con = DriverManager.getConnection(args[1], args[2],   
          args[3]);   
      File f = new File(args[4]);   
      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[0]);   
        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[1024];   
        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[nlen];   
            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[len];   
  
          System.arraycopy(data, 0, narr, 0, len);   
          data = narr;   
        }   
        stmt = con.prepareStatement("INSERT INTO BlobTest(fileName, "  
            + "blobData) VALUES(?, ?)");   
        stmt.setString(1, args[0]);   
        stmt.setObject(2, data);   
        stmt.executeUpdate();   
        f.delete();   
      }   
      con.close();   
    } catch (Exception e) {   
      e.printStackTrace();   
    }   
  }   
}   

你可能感兴趣的:(java,sql,jdbc,F#,OS)