我是个菜鸟,对oracle不甚熟悉,现在请教一个问题,怎样图片(大字段、大对象)数据写入oracle中,图片的格式有两种:jpg、bmp。图片数量较大,上万张。请问用何种方式存贮比较省时省力?望高手不吝赐教。

解决方案 »

  1.   


    CREATE TABLE PHOTO 

    PICTUREID NUMBER , 
    PICTURE BLOB DEFAULT EMPTY_BLOB()
    ); Then use SQL*LOADER to insert data.
      

  2.   

    用BLOB管理是比较方便,但是我觉得存储文件路径更节约数据库时间,能提高i/o性能。
    这个讨论也许对你有所帮助
    http://expert.csdn.net/Expert/topic/1576/1576763.xml?temp=.8561365
      

  3.   

    可以将他们存到blob字段中我自己做了一个例子,如果你需要的话
    给我发email,我把代码发给你
    [email protected]
      

  4.   

    //补充:如何保存图片到数据库File file = new File("myimage.gif");
    FileInputStream fis = new FileInputStream(file);
    PreparedStatement ps = 
       conn.prepareStatement("insert into images values (?,?)");
    ps.setString(1,file.getName());
    ps.setBinaryStream(2,fis,file.length());
    ps.executeUpdate();
    ps.close();
    fis.close();
    ...
    <img src=showimage.jsp?ID=1234>
    ...
    =======================showimage.jsp=================
    <%@ page language="java" import="java.sql.*,java.util.*"%>
    <%
        String image_id = (String) request.getParameter("ID");
        if (image_id != null){
              try 
              {
                Class.forName("oracle.jdbc.driver.OracleDriver");
              Connection con = DriverManager.getConnection("jdbc:oracle:thin:scott/[email protected]:1243:myInstance","java","java");
              Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM IMMAGINE WHERE IMMAGINE_ID = " + image_id);
            if (rs.next())
                {
            String dim_image = rs.getString("IMMAGINE_DIMENSIONE");
            byte [] blocco = rs.getBytes("IMMAGINE_IMMAGINE");
            response.setContentType("image/jpeg");
            ServletOutputStream op = response.getOutputStream();
            for(int i=0;i<Integer.parseInt(dim_image);i++)
            {
                op.write(blocco[i]);
            }
            } 
          rs.close();
          stmt.close();
          con.close();
         } catch(Exception e) {
            out.println("An error occurs : " + e.toString());                
            }            
        }
    %>///********************补充:如何保存图片到数据库java.sql.Connection lConn = null;
        java.sql.Statement lStat = null;
        java.sql.ResultSet lRs = null;
        try
        {      
          DBConnectionManager lDB = DBConnectionManager.getInstance();
          lConn =  lDB.getConnection("ORACLE");
          lStat = lConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          lStat.executeUpdate("insert id,EMPTY_BLOB() from tab where id=2");
          lRs = lStat.executeQuery("select pic from tab where id=2");
          if(lRs.next())
          {
            oracle.sql.BLOB blob = (oracle.sql.BLOB)lRs.getBlob("pic");
            OutputStream outstream = blob.getBinaryOutputStream();
            byte[] bAtt = "data".getBytes();
            outstream.write(bAtt,0,bAtt.length);
            outstream.close();
            lRs.updateBlob("pic",blob);
          }
          
        }
        catch(Exception e)
        {
          e.printStackTrace();       
        }
        finally
        {
          try{lRs.close();}catch(Exception e){}  
          try{lStat.close();}catch(Exception e){}  
          try{lConn.close();}catch(Exception e){}  
        }
        
        
        
    //*****************************************