我以前没有使用过oracle,我打算修改clob数据,因为它有我的家庭电话号码。但是当我这样做时,select * from表显示CLOB,并且我看不到数据。如何查看数据以及如何更新数据?
我需要查询。
发布于 2009-04-06 16:11:49
在PL/SQL Developer中,选择ROWID和表列:
SELECT t.*, t.rowid
FROM mytable t这将允许您编辑表的数据。
然后,只需选中CLOB字段旁边的...按钮并对其进行编辑。
您可以从文件中加载它,也可以直接在编辑字段中键入。
发布于 2009-04-06 19:37:35
您使用什么工具来执行查询?sqlplus会将clob列中的select截断为参数long的值。如果您使用的是sqlplus,那么将long设置为一个足够大的值来容纳clob,然后执行一个简单的select操作应该会返回数据。Clobs只是文本,因此可以像查询表中任何其他列一样查询它。如果您使用的是sqlplus,并且它返回的是partial而不是nothing,那么请确保表中的列已填充。
发布于 2009-04-06 16:27:34
用代码?
Java (更新作为字段保存在名为dbo的对象中的CLOB字段):
String sql = "SELECT clobby_wobby FROM table WHERE uuid = ? FOR UPDATE";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setLong(1, dbo.getUID());
ResultSet rs = ps.executeQuery();
if (rs.next()) {
oracle.sql.CLOB clob = (oracle.sql.CLOB) ((OracleResultSet) rs).getClob(1);
failed = writeClob(clob, dbo.getClobbyWobby());
}
rs.close();
ps.close();其中writeClob()是:
protected boolean writeClob(oracle.sql.CLOB clob, String data) throws SQLException {
if (data == null) { return false; }
return writeClob(clob, data.toCharArray());
}
protected boolean writeClob(oracle.sql.CLOB clob, char[] data) throws SQLException {
if (data == null || clob == null) { return false; }
char[] buffer = new char[clob.getBufferSize()];
Writer os = clob.getCharacterOutputStream();
int len = -1;
CharArrayReader car = new CharArrayReader(data);
try {
while ((len = car.read(buffer)) != -1) {
os.write(buffer, 0, len);
os.flush();
}
} catch (IOException ioe) {
logger.error("IOException copying clob data into DB", ioe);
return false;
} finally {
try {
car.close();
os.close();
} catch (IOException ioe) {}
}
return true;
}有时我想知道为什么该死的Oracle驱动程序本身不能检测到字段是CLOB,而只是透明地处理ps.setString(“超长值”)本身……这就是有人回答说“为什么不使用Oracle LOB Java实用程序方法?!”我从来不知道的..。
https://stackoverflow.com/questions/722113
复制相似问题