您的位置:首页 > 数据库 > Oracle

java 读写oracle中LONG类型的字段 [还未自己验证]

2006-07-25 13:52 543 查看
在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,如果是更新数据库或者将数据插入到数据库中使用PreparedStatement的setCharacterStream,并且传入Reader类型的参数和字符串的长度.如果是检索数据库中的LONG类型的数据,那么使用getCharacterStream方法,获得一个Reader类型的对象,然后就可以从其中获取LONG类型的数据了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: