ORACLE long类型数据保存和生成XML



ORACLE中可以使用LONG类型保存大文本,但是操作LONG类型的数据和一般的数据类型不同,下面就举例说明如何将数据保存到LONG类型的字段中.

 

保存数据到LONG类型的字段中,下面将使用一个表进行测试,该表的创建语句如下:

 

CREATE TABLE T_LONGTEST

(

  ID        INTEGER                             NOT NULL,

  FILENAME  VARCHAR2(100 BYTE),

  CONTENT   LONG

)

LOGGING 

NOCACHE

NOPARALLEL;

 

CREATE UNIQUE INDEX PK_T_LONGTEST ON T_LONGTEST

(ID)

LOGGING

NOPARALLEL;

 

ALTER TABLE T_LONGTEST ADD (

  CONSTRAINT PK_T_LONGTEST PRIMARY KEY (ID));

 

插入LONG类型的数据

 

    String fileName = file.getAbsolutePath();

    long length;

    if (!file.exists()) {

        logger.error("The file <" + fileName + "> is not exists");

        return;

    }

    length = file.length();

    BufferedReader bufReader = new BufferedReader(new FileReader(file));

    Integer id = Integer.valueOf(PubFun1.CreateMaxNo(TEST_LONG_ID, 1));

    PreparedStatement pstmt = con.prepareStatement(INSERT_LONG_SQL);

    pstmt.setObject(1, id);

    pstmt.setObject(2, fileName);

    pstmt.setCharacterStream(3, bufReader, (int) length);

    int retValue = pstmt.executeUpdate();

    if (retValue != 1) {

        logger.error("Error on insert value");

    }

    bufReader.close();

    pstmt.close();

 

INSERT_LONG_SQL的值为:

INSERT INTO T_LONGTEST(ID, FILENAME, CONTENT) VALUES (?, ?, ?)

注意需要使用setCharacterStream方法设置LONG类型的字段的值.

 

读取LONG类型的数据

 

读取也需要使用Stream的方式来读取,下面的代码片断说明了读取LONG类型的字段的方法.

    PreparedStatement pstmt = con.prepareStatement(QUERY_LONG_COL_SQL);

    pstmt.setObject(1, id);

    ResultSet rs = pstmt.executeQuery();

    if (rs.next()) {

        Reader reader = rs.getCharacterStream(1);

        BufferedReader bufReader = new BufferedReader(reader);

        StringBuffer strBuf = new StringBuffer();

        String line;

        while ((line = bufReader.readLine()) != null) {

            strBuf.append(line);

            strBuf.append("\r\n");

        }

        bufReader.close();

        System.out.println("The content is:" + strBuf.toString());

    }

QUEYR_LONG_COL_SQL的取值为:SELECT CONTENT FROM T_LONGTEST WHERE ID=?

 

更新LONG类型的数据

 

更新LONG类型的方法和插入的代码是一样的,只是SQL语句不同.下面的代码断说明了如何更新LONG类型的数据.(这个例子没有使用T_LONGTEST)

    StringReader reader = new StringReader(xmlString);

    pstmt = con

            .prepareStatement(REPORT_MODEL_CONTENT_UPDATE_SQLSTRING);

    pstmt.setCharacterStream(1, reader, xmlString.length());

    pstmt.setInt(2, reportModelId);

    if (pstmt.executeUpdate() == 0) {

        logger

                .error("Error on update");

    }

    reader.close();

REPORT_MODEL_CONTENT_UPDATE_SQLSTRING的取值为:

UPDATE REPORT_MODEL SET CONTENT=? WHERE REPORT_MODEL_ID=?

 

总结:

 

从上面的例子可以看到,操作LONG类型的字段主要是通过CharacterStream,如果是更新数据库或者将数据插入到数据库中使用PreparedStatementsetCharacterStream,并且传入Reader类型的参数和字符串的长度.如果是检索数据库中的LONG类型的数据,那么使用getCharacterStream方法,获得一个Reader类型的对象,然后就可以从其中获取LONG类型的数据了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值