代码:
try
      {
         java.sql.Connection c = o.getConnection () ;
         java.sql.PreparedStatement pst = null ;
         pst = c.prepareStatement (
             "INSERT INTO sunmeng.DATATYPE_BLOB VALUES(?)" ) ;
         //---
         File f = new File ( "c:\\a.bmp" ) ;
         int flen = ( int ) f.length () ;
         FileInputStream fis = new FileInputStream ( f ) ;
         pst.setBinaryStream ( 1 , fis , flen ) ;
         pst.executeUpdate () ;
         //----
         pst.close () ;
         o.close () ;
         fis.close () ;
      }报告:
toString:java.sql.SQLException: ORA-00600: 内部错误代码,自变量: [12204], [24], [], [], [], [], [], []
getMessage:ORA-00600: 内部错误代码,自变量: [12204], [24], [], [], [], [], [], []

解决方案 »

  1.   

    pst.setBinaryStream ( 1 , fis , flen ) ;改为  byte[] content = new byte[f.flen];
      oracle.sql.BLOB  ablob = new oracle.sql.BLOB();
      fis.readBytes(content)
      ablob.setBytes(0,content);
      pst.setBlob(ablob); 你可以试试看。
      

  2.   

    oracle.sql.BLOB  ablob = new oracle.sql.BLOB();
     "BlobUtil.java": cannot find symbol; symbol  : constructor BLOB(java.sql.Connection,byte[]), location: class oracle.sql.BLOB at line 107, column 34
      

  3.   

    File f = new File ( "c:\\a.bmp" ) ;
             int flen = ( int ) f.length () ;
             FileInputStream fis = new FileInputStream ( f ) ;
             byte[] content = new byte[flen];
             fis.read(content);
      oracle.sql.BLOB  ablob =  oracle.sql.BLOB.empty_lob();
      
      ablob.setBytes(content);这样试试。。至少测试没有错误 :)
      

  4.   

    import java.io.*;
    import java.sql.*;
    public class BlobOperation
    {
    public static void addLob(long id, String binFile) throws SQLException
    {
    Connection con = null;
    PreparedStatement ps = null;
    ResultSet rs = null; try
    {
    con = ConnectionFactory.getConnection(); //换成你自己取连接的方法
    con.setAutoCommit(false); String sql = "INSERT INTO Blob_Tbl(id, binfile, bincontent)";
    sql += " VALUES(?, ?, ?)";
    ps = con.prepareStatement(sql); ps.setLong(1, id);
    ps.setString(2, binFile);
    ps.setBlob(3, oracle.sql.BLOB.empty_lob()); ps.executeUpdate();
    //DatabaseUtils.closeObject(ps); ps = con.prepareStatement("SELECT bincontent FROM Blob_Tbl WHERE id = " + id + " for update ");
    rs = ps.executeQuery(); if (rs.next())
    {
    oracle.sql.BLOB binContent = (oracle.sql.BLOB) rs.getBlob(1); /* write blob content */
    OutputStream binOut = binContent.getBinaryOutputStream();
    BufferedOutputStream out = new BufferedOutputStream(binOut);
    BufferedInputStream in = new BufferedInputStream(new FileInputStream(binFile));
    int c;
    while ((c = in.read()) != -1)
    {
    out.write(c);
    }
    in.close();
    out.close();
    }
    con.commit();
    } catch (Exception e)
    {
    e.printStackTrace();
    try
    {
    con.rollback();
    } catch (SQLException se)
    {
    }
    throw new SQLException(e.getMessage());
    } finally
    {
    DatabaseUtils.closeObject(rs, ps, con);
    }
    } public static void fetchLob(long id, String filename) throws SQLException
    {
    Connection con = null;
    Statement st = null;
    ResultSet rs = null; try
    {
    con = ConnectionFactory.getConnection(); String sql = "SELECT *  From Blob_Tbl Where id = " + id;
    st = con.createStatement(); rs = st.executeQuery(sql);
    while (rs.next())
    { String binFile = rs.getString("binfile");
    oracle.sql.BLOB binContent = (oracle.sql.BLOB) rs.getBlob("bincontent"); /* read blob content */
    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(filename));
    BufferedInputStream in = new BufferedInputStream(binContent.getBinaryStream()); int c;
    while ((c = in.read()) != -1)
    {
    out.write(c);
    }
    in.close();
    out.close();
    } } catch (Exception e)
    {
    throw new SQLException(e.getMessage());
    } finally
    {
    DatabaseUtils.closeObject(rs, st, con);
    }
    } public static void main(String[] args) throws Exception
    {
    if (args.length == 0)
    {
    addLob(1, "a.jpg");
    } else
    {
    fetchLob(1, args[0]);
    }
    }
    }
      

  5.   

    oracle.sql.BLOB.empty_lob () 
    我的oracle.sql.BLOB没有 empty_lob () 这个函数!
      

  6.   

    你的 ORACLE JDBC 是哪个版本啊??
    建议下载 ORACLE 9I 的 JDBC!!
    我的有!!
      

  7.   

    hesi726(hesi) ( ) :
    您好!请问您 ORACLE 9I 的 JDBC在那里下载!
      

  8.   

    你的数据库是什么版本的??如果是 9i,则直接在 ORACLE 的 jdbc目录下的LIB目录下