BLOB和CLOB

       一、Oracle的基本数据类型

 

       1.字符数据类型

        CHAR:定长字符串,默认长度1B,最大长度255B

        VARCHAR2:变长字符串,必须指定最大字节数,最大长度2000B

        LONG:变长字符串,最大长度2G。一个表中最多只有一个LONG列,LONG列不能有索引,不能出现完整性约束。

        2.数字数据类型

        NUMBER:存储零、正负定点数或浮点数,最大进度38位。语法:NUMBER(P,S) P表示总的数字数,S表示小数点右边的数字位。

        FLOAT:指定浮点数 

        DATE:用于存储日期和时间信息。若要指定日期值,须用TO_DATE()将字符型的值或数值转化为日期型的值。日期型数据的默认格式为DD-MON-YY

        RAW及LONG RAW:存储字符串、浮点数、二进制数据等。RAW数据仅可存储和检索,不能执行串操作。

        ROWID:数据库表中的一个伪列。数据库中每一行都有一个地址,可通过查询ROWID获得行地址。值为16进制字符串。   

        BLOB:二进制数据可以存储到不同的表空间中。

        CLOB:字符型数据可以存储到不同的表空间中。

        BFILE:二进制文件可以存储在服务器上的外部文件中。

 

     二、BLOB与CLOB操作案例

        1、 get

        CLOB     

        //获得数据库连接   

    Connection con = ConnectionFactory.getConnection();   

    con.setAutoCommit(false);   

    Statement st = con.createStatement();   

    //不需要“for update”   

    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1");   

    if (rs.next())   

    {   

        java.sql.Clob clob = rs.getClob("CLOBATTR");   

        Reader inStream = clob.getCharacterStream();   

        char[] c = new char[(int) clob.length()];   

        inStream.read(c);   

        //data是读出并需要返回的数据,类型是String   

        data = new String(c);   

        inStream.close();   

    }   

    inStream.close();   

    con.commit();   

    con.close();   

     BLOB:

     //获得数据库连接   

    Connection con = ConnectionFactory.getConnection();   

    con.setAutoCommit(false);   

    Statement st = con.createStatement();   

    //不需要“for update”   

    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1");   

    if (rs.next())   

    {   

        java.sql.Blob blob = rs.getBlob("BLOBATTR");   

        InputStream inStream = blob.getBinaryStream();   

        //data是读出并需要返回的数据,类型是byte[]   

        data = new byte[input.available()];   

        inStream.read(data);   

        inStream.close();   

    }   

    inStream.close();   

    con.commit();   

    con.close();   

 2、 put

  CLOB
 
    //获得数据库连接   
    Connection con = ConnectionFactory.getConnection();   
    con.setAutoCommit(false);   
    Statement st = con.createStatement();   
    //插入一个空对象empty_clob()   
    st.executeUpdate("insert into TESTCLOB (ID, NAME, CLOBATTR) values (1, "thename", empty_clob())");   
    //锁定数据行进行更新,注意“for update”语句   
    ResultSet rs = st.executeQuery("select CLOBATTR from TESTCLOB where ID=1 for update");   
    if (rs.next())   
    {   
        //得到java.sql.Clob对象后强制转换为oracle.sql.CLOB   
        oracle.sql.CLOB clob = (oracle.sql.CLOB) rs.getClob("CLOBATTR");   
        Writer outStream = clob.getCharacterOutputStream();   
        //data是传入的字符串,定义:String data   
        char[] c = data.toCharArray();   
        outStream.write(c, 0, c.length);   
    }   
    outStream.flush();   
    outStream.close();   
    con.commit();   
    con.close();  
  BLOB
//获得数据库连接   
    Connection con = ConnectionFactory.getConnection();   
    con.setAutoCommit(false);   
    Statement st = con.createStatement();   
    //插入一个空对象empty_blob()   
    st.executeUpdate("insert into TESTBLOB (ID, NAME, BLOBATTR) values (1, "thename", empty_blob())");   
    //锁定数据行进行更新,注意“for update”语句   
    ResultSet rs = st.executeQuery("select BLOBATTR from TESTBLOB where ID=1 for update");   
    if (rs.next())   
    {   
        //得到java.sql.Blob对象后强制转换为oracle.sql.BLOB   
        oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBlob("BLOBATTR");   
        OutputStream outStream = blob.getBinaryOutputStream();   
        //data是传入的byte数组,定义:byte[] data   
        outStream.write(data, 0, data.length);   
    }   
    outStream.flush();   
    outStream.close();   
    con.commit();   
    con.close();   

你可能感兴趣的:(BLOB和CLOB)