¡¤ [JavaÂÛ̳][°²È«ÂÛ̳][Êý¾Ý¿âÂÛ̳][²Ù×÷ϵͳÂÛ̳]
¡¤ [·Ã̸] ÍøÒø°²È«ÏµÁзÃ̸֮£º¾ªÐ͝ÆÇÍøÒø¹ÊÊÂ
¡¤ [ÈȵãרÌâ] ÍøÒø°²È«ÏµÁС¡3GÉÏÍø¿¨Ñ²Àñ
¡¤ [¶©ÔÄIT¼¼ÊõÖÜ¿¯][IT×ÊÔ´ÏÂÔØ×¨Çø][²¡¶¾ÇóÖú×¨Çø]
¡¤ [Èȵã] ¿çÕ¾½Å±¾Ê®¶þÎÊ ËIJ½·À·¶Conficker
¡¤ [Èȵã] Windows 7 RC°æ¹«¿ªÏÂÔØ¡¡º¶È±ÖÐÎİæ

ʹÓÃJDBCºÍHibernateÀ´Ð´ÈëBlobÐÍÊý¾Ýµ½OracleÖÐ

·¢²¼Ê±¼ä£º2006.03.15 14:09     À´Ô´£ºMatrix    ×÷Õߣºjdbc

OracleµÄBlob×ֶαȽÏÌØÊ⣬Ëû±Èlong×ֶεÄÐÔÄÜÒªºÃºÜ¶à£¬¿ÉÒÔÓÃÀ´±£´æÀýÈçͼƬ֮ÀàµÄ¶þ½øÖÆÊý¾Ý¡£

дÈëBlob×ֶκÍдÈëÆäËüÀàÐÍ×ֶεķ½Ê½·Ç³£²»Í¬£¬ÒòΪBlob×ÔÉíÓÐÒ»¸öcursor£¬Äã±ØÐëʹÓÃcursor¶Ôblob½øÐвÙ×÷£¬Òò¶øÄãÔÚдÈëBlob֮ǰ£¬±ØÐë»ñµÃcursor²ÅÄܽøÐÐдÈ룬ÄÇôÈçºÎ»ñµÃBlobµÄcursorÄØ£¿

ÕâÐèÒªÄãÏȲåÈëÒ»¸öemptyµÄblob£¬Õ⽫´´½¨Ò»¸öblobµÄcursor£¬È»ºóÄãÔÙ°ÑÕâ¸öemptyµÄblobµÄcursorÓÃselect²éѯ³öÀ´£¬ÕâÑùͨ¹ýÁ½²½²Ù×÷£¬Äã¾Í»ñµÃÁËblobµÄcursor£¬¿ÉÒÔÕæÕýµÄдÈëblobÊý¾ÝÁË¡£

¿´ÏÂÃæµÄJDBCµÄdemo£¬°Ñoraclejdbc.jarÕâ¸ö¶þ½øÖÆÎļþдÈëÊý¾Ý¿â±íjavatestµÄcontent×Ö¶Î(ÕâÊÇÒ»¸öblobÐÍ×Ö¶Î)

import java.sql.*; 
import java.io.*;
import oracle.sql.*;
public class WriteBlob {

  public static void main(String[] args) {

    try {
      DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
      Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","fankai","fankai");
      conn.setAutoCommit(false);

      BLOB blob = null;

      PreparedStatement pstmt = conn.prepareStatement("insert into javatest(name,content) values(?,empty_blob())");
      pstmt.setString(1,"fankai");
      pstmt.executeUpdate();
      pstmt.close();

      pstmt = conn.prepareStatement("select content from javatest where name= ? for update");
      pstmt.setString(1,"fankai");
      ResultSet rset = pstmt.executeQuery();
      if (rset.next()) blob = (BLOB) rset.getBlob(1);

      String fileName = "oraclejdbc.jar";
      File f = new File(fileName);
      FileInputStream fin = new FileInputStream(f);
      System.out.println("file size = " + fin.available());

      pstmt = conn.prepareStatement("update javatest set content=? where name=?");

      OutputStream out = blob.getBinaryOutputStream();

      int count = -1, total = 0;
      byte[] data = new byte[(int)fin.available()];
      fin.read(data);
      out.write(data);
      /*
      byte[] data = new byte[blob.getBufferSize()];  ÁíÒ»ÖÖʵÏÖ·½·¨,½ÚÊ¡ÄÚ´æ
      while ((count = fin.read(data)) != -1) {
        total += count;
        out.write(data, 0, count);
      }
      */

      fin.close();
      out.close();

      pstmt.setBlob(1,blob);
      pstmt.setString(2,"fankai");

      pstmt.executeUpdate();
      pstmt.close();

      conn.commit();
      conn.close();
    } catch (SQLException e) {
      System.err.println(e.getMessage());
      e.printStackTrace();
    } catch (IOException e) {
      System.err.println(e.getMessage());
    }
  }

}


×Ðϸ¿´ÉÏÀý£¬·ÖÈý²½£º

1¡¢²åÈë¿Õblob
into javatest(name,content) values(?,empty_blob());

2¡¢»ñµÃblobµÄcursor
select content from javatest where name= ? for update;

×¢Ò⣡£¡£¡±ØÐë¼Ófor update£¬Õâ½«Ëø¶¨¸ÃÐУ¬Ö±ÖÁ¸ÃÐб»ÐÞ¸ÄÍê±Ï£¬±£Ö¤²»²úÉú²¢·¢³åÍ»¡£

3¡¢update javatest set content=? where name=

ÓÃcursorÍùÊý¾Ý¿âдÊý¾Ý

ÕâÀïÃæ»¹ÓÐÒ»µãÒªÌáÐÑ´ó¼Ò£º

JDK1.3´øµÄJDBC2.0¹æ·¶ÊDz»ÍêÉÆµÄ£¬Ö»ÓжÁBlobµÄ½Ó¿Ú£¬¶øÃ»ÓÐдBlobµÄ½Ó¿Ú£¬JDK1.4´øµÄJDBC3.0¼ÓÈëÁËдBlobµÄ½Ó¿Ú¡£Äã¿ÉÒÔʹÓÃJDBC3.0µÄ½Ó¿Ú£¬Ò²¿ÉÒÔÖ±½ÓʹÓÃOracleµÄJDBCµÄAPI£¬ÎÒÔÚÉÏÀýÖÐʹÓÃÁËOracleµÄJDBCµÄAPI¡£

ÁíÍâҪעÒâµÄÊÇ£º

java.sql.Blob
oracle.sql.BLOB

×¢Òâ¿´blobµÄ´óСд£¬ÊDz»Ò»ÑùµÄ¡£Ð´³ÌÐòµÄʱºò²»Òª¸ã»ìÁË¡£

ÏÂÃæ¿´¿´ÓÃHibernateÔõôд£¬Ô­ÀíÊÇÒ»ÑùµÄ£¬Ò²Òª·ÖÈý²½£¬µ«ÊÇ´úÂë¼òµ¥ºÜ¶à

ÕâÊÇCat¶ÔÏó¶¨Òå

package com.fankai;

import java.sql.Blob; 

public class Cat {
  private String id;
  private String name;
  private char sex;
  private float weight;
  private Blob image;
  public Cat() { }

  public String getId() { return id; }
  public void setId(String id) { this.id = id; }

  public String getName() { return name; }
  public void setName(String name) { this.name = name; }

  public char getSex() { return sex; }
  public void setSex(char sex) { this.sex = sex; }

  public float getWeight() { return weight; }
  public void setWeight(float weight) { this.weight = weight; }
  
  public Blob getImage() { return image; }
  public void setImage(Blob image) { this.image = image;}
}



ÕâÊÇCat.hbm.xml
<?xml version="1.0"?> 


<hibernate-mapping>
    <class name="com.fankai.Cat" table="cat">
        <!--jcs-cache usage="read-only"/-->
        <id name="id" unsaved-value="null">
            <generator class="uuid.hex"/>
        </id>
        <property name="name" length="16" not-null="true"/>
        <property name="sex" length="1" not-null="true"/>
        <property name="weight" />
        <property name="image" />
    </class>
</hibernate-mapping>




ÏÂÃæÊÇÍêÕûµÄÓÃHibernateдÈëBlobµÄÀý×Ó£¬Ïà±ÈJDBC£¬ÒѾ­¼òµ¥ÇáËɶàÁË£¬Ò²²»ÓÃдÄÇЩOracleÌØÊâµÄsqlÁË£º

package com.fankai; 

import java.sql.Blob;
import net.sf.hibernate.*;
import oracle.sql.*;
import java.io.*;

public class TestCatHibernate {  
  public static void testBlob() {
    Session s = null;    
    byte[] buffer = new byte[1];
    buffer[0] = 1;
    try {
      SessionFactory sf = HibernateSessionFactory.getSessionFactory();
      s = sf.openSession();  
      Transaction tx = s.beginTransaction();
      Cat c = new Cat();
      c.setName("Robbin");
      c.setImage(Hibernate.createBlob(buffer));
      s.save(c);
      s.flush();
      s.refresh(c, LockMode.UPGRADE);    
      BLOB blob = (BLOB) c.getImage();      
      OutputStream out = blob.getBinaryOutputStream();    
      String fileName = "oraclejdbc.jar";
      File f = new File(fileName);
      FileInputStream fin = new FileInputStream(f);    
      int count = -1, total = 0;
      byte[] data = new byte[(int)fin.available()];
      fin.read(data);
      out.write(data);      
      fin.close();
      out.close();
      s.flush();
      tx.commit();
    
    } catch (Exception e) {
      System.out.println(e.getMessage());
    } finally {
      if (s != null)
        try {
          s.close();
        } catch (Exception e) {}
    }    
    
  }
}


[ ·¢±íÆÀÂÛ ] ×ÖÌå[ ´óÖÐС ] [ ´òÓ¡ ] [ ½øÈ벩¿Í ] [ ½øÈëÂÛ̳ ]  [ ÍÆ¼ö¸øÅóÓÑ ]
  ¡¾Ïà¹ØÎÄÕ¡¿
¡¤ ÔÚWeblogicÉÏÅäÖÃHibernateΪJNDI (03-24) ¡¤ ʹÓô¦ÀíÁ´´¦ÀíWEB·þÎñÖеÄÇëÇó/ÏìÓ¦ÏûÏ¢ (05-22)
¡¤ J2EEÏîĿִÐУºÈô¸É×î¼Ñʵ¼ù (03-03) ¡¤ ¹ØÓÚEJBµÄ»ù±¾¸ÅÄîºÍÀý×Ó (10-24)
¡¤ ¹ØÓÚEJBµÄ»ù±¾¸ÅÄîºÍÀý×Ó2 (07-28) ¡¤ jbossÏÂejb¼ò½é (11-07)
¡¤ ÎÊÌ⼯½õ£ºServlets/JSP¿ª·¢¼¼ÊõÎÊ´ð (07-16) ¡¤ TomcatÅäÖü¼Çɾ«»ªÏê½â (03-04)
¡¤ ½âÎö Hibernate Validator (07-27) ¡¤ »ùÓÚʱ¼ä´ÁµÄ»º´æ¹¹¼Ü£º×î½üµÄÊý¾ÝÓµÓÐ×î¼ÑµÄ (09-20)
  ¡¾¿Í»§ÐèÇó·´À¡±í¡¿
* ÐÕ¡¡¡¡Ãû:
¸ü¶à×ÊÁÏ¡¡ Á˽ⷽ°¸¡¡ ÈÏʶ³§ÉÌ
* µ¥Î»Ãû³Æ:
* ÁªÏµµç»°:
* µç×ÓÓʼþ:
×ÊѶ ͨÐÅ IT²úÆ· IT¼¼Êõ ÐÅÏ¢»¯
2009µÚÆß½ìÖйúµçÄÔÉÌÄê»áÖ±²¥
·´´ÒµÍ¶×ÊϵÁзÃ̸£º²úÒµ..
·Ìرð²ß»®£ºÊÓÆµÍøÕ¾ÏµÁÐ..
·×¨Ìâ£ºÍøÓÎÐéÄâ»õ±Òйæ..
רÌ⣺6ÔÂÉÏÊÐÊÖ»úÐÂÆ·»Ø¹Ë¼°7ÔÂлúÕ¹Íû
·2009ÄêÖйúµçÐÅÒµÐÅÏ¢»¯..
·×¨Ì⣺°ÑiPhone 3GS¡°½â..
·WAPIÖØÆô¹ú¼Ê±ê×¼½ø³Ì ..
רÌ⣺09ÄêÖÐÅ̵ã-ÁªÏë´º¼¾´òÓ¡»úÐÂÆ·»Ø¹Ë
·InfoComm 2009 ÊÓÌýÓ뼯..
·ÍøÓα³ºóµÄ¹ÊÊÂ ÍøÓηþ..
·[רÌâ]ÁªÏëThinkPad T40..
BizSpark£ºÎ¢ÈíΪ¼¼Êõ´´ÒµÆóÒµµãȼ»ð»¨
·ÉçÇø»î¶¯£ºÎÒµÄITÇóÖªÉú..
··Ã̸£ºÄÚÍø°²È«2009ϵÁÐ..
·°²È«·Ã̸£ºÍøÒø°²È«Ö®Sa..