oracle java long_利用oracle long类型字段,插入大文本
发布日期:2021-06-24 17:41:52 浏览次数:2 分类:技术文章

本文共 3059 字,大约阅读时间需要 10 分钟。

我在编写应用时,需要大量的插入大文本,但是oracle 的clob操作起来比较繁琐,应此我没有选择使用clob,而是使用了oracle以前版本中的long类型[但是long类型有一些限制,在一个表中只能有一个long字段]。

开始的时候我直接使用insert into table1 values(a,b[long])的方式插入数据库,但是oracle有些限制一条语句不能超过4000个字符,并报ORA-01704的错误。

经过查找oracle 的文档找到了解决的方法,就是对于long的字段使用setCharacterStream()方法将String插入数据库。

代码:

sql="insert into msg_info values (?,?,?,?[long类型字段],'C',sysdate,sysdate+"+msgterm+",?)";

pstat1 = conn.prepareStatement(sql);

pstat1.setLong(1, msg_id);

pstat1.setInt(2, msg_gp_id);

pstat1.setString(3, msg_title);

pstat1.setCharacterStream(4,new StringReader(msg_info.toString()),msg_info.length());

conn.commit();

pstat1.setLong(5, this.upid);

long类型oracle并不推荐,还是采用CLOB才是正路,毕竟现在已是21世纪。

但是CLOB的确用起来非常麻烦,楼主的贴子收藏。

****************************************使用JDBC存取ORACLE中的LONG类型的数据

****************************************

在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类型的数据

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,如果是更新数据库或者将数据插入到数据库中使用PreparedStatement的setCharacterStream,并且传入Reader类型的参数和字符串的长度.如果是检索数据库中的LONG类型的数据,那么使用getCharacterStream方法,获得一个Reader类型的对象,然后就可以从其中获取LONG类型的数据了.

转载地址:https://blog.csdn.net/weixin_34190683/article/details/114452750 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java jar jvm_java jvm揭幕——高级开发
下一篇:python大型工程文件架构_聊聊Python模块导入机制与大型项目规范

发表评论

最新留言

很好
[***.229.124.182]2024年04月08日 14时45分25秒