unixboy 发表于 2013-2-7 09:59:16

用java 对 oracle 中的 image 存取

package data;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.sql.Blob;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class BlobTest { public void insertBlob(String imageId, String fileName) {   Connection conn = null;   try {   conn = getConnection();   if (!fileName.equals("")) {       PreparedStatement ps = conn.prepareStatement("INSERT INTO IMAGES VALUES(?, ?)");       ps.setString(1, imageId);       FileInputStream fis = new FileInputStream(fileName);       ps.setBinaryStream(2, fis, fis.available());       ps.execute();       ps.close();   } else {       PreparedStatement ps = conn.prepareStatement("INSERT INTO IMAGES VALUES (?, empty_blob())");       ps.setString(1, imageId);       ps.execute();       ps.close();   }   conn.close();   } catch (Exception e) {   e.printStackTrace();   } } public void readBlob(String fileName) {   Connection conn = null;   try {   conn = getConnection();   Statement st = conn.createStatement();   ResultSet rs = st.executeQuery("SELECT IMAGE FROM IMAGES");   while (rs.next()) {      // The following two lines can be replaced by      // InputStream is = rs.getBinaryStream(1);       Blob blob = rs.getBlob(1);       InputStream is = blob.getBinaryStream();       FileOutputStream fos = null;       fos = new FileOutputStream("c:/TEMP/" + fileName);       byte[] data = new byte;       int i = 0;       while ((i = is.read(data)) != -1) {         fos.write(data, 0, i);       }   }   conn.close();   } catch (Exception e) {   e.printStackTrace();   } } public void writeBlob(String fileName) {   Connection conn = null;   try {   conn = getConnection();   Statement st = conn.createStatement();   ResultSet rs = st.executeQuery("SELECT IMAGE FROM IMAGES FOR UPDATE");   while (rs.next()) {       Blob blob = rs.getBlob(1);       System.out.println(blob);      OutputStream os = blob.setBinaryStream(1);       FileInputStream fis = null;       fis = new FileInputStream("c:/TEMP/" + fileName);       byte[] data = new byte;       int i;       while ((i = fis.read(data)) != -1) {         os.write(data, 0, i);       }       os.close();       break;   }   conn.close();   } catch (Exception e) {   e.printStackTrace();   } } private Connection getConnection() throws ClassNotFoundException, SQLException {   Class.forName("oracle.jdbc.driver.OracleDriver");   Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL", "scott", "tiger");   return conn; } public static void main(String[] args) {   BlobTest blobTest = new BlobTest();   blobTest.insertBlob("img1", "");   blobTest.writeBlob("2.gif"); }}
页: [1]
查看完整版本: 用java 对 oracle 中的 image 存取