java - JDBC Clob 和 NClob

标签 java oracle jdbc

java.sql.Clobjava.sql.NClob 之间有什么区别吗? java.sql.NClob 接口(interface)没有新方法。我尝试了以下方法:

设置SQL:

create table tab(id number(2), clobcol clob, nclobcol nclob)
insert into tab values (1, to_clob('你好'), to_nclob('你好'))

JDBC 代码:

conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from tab");
rs.next();
Clob c = rs.getClob(2);
NClob nc = rs.getNClob(3);
InputStream inputStream1 = c.getAsciiStream();
InputStream inputStream2 = nc.getAsciiStream();
System.out.println(inputStream1.available());
System.out.println(inputStream2.available());
c.free();
nc.free();

我也尝试过其他一些方法,看起来输出没有什么区别。我能看到一些具体的差异吗?

在数据库中添加了支持的字符集:

SELECT parameter, value
  FROM v$nls_parameters
  3   WHERE parameter LIKE '%CHARACTERSET';

PARAMETER             VALUE
--------------------------------- --------------------
NLS_CHARACTERSET          AL32UTF8
NLS_NCHAR_CHARACTERSET        AL16UTF16

最佳答案

在过去(80 年代),许多数据库是使用 US7ASCII(在美国)或 ISOLATIN1(在欧洲)作为字符集创建的。对于今天仍然存在的这些数据库(经过多次升级),存储非 ASCII 字符串数据的唯一方法是使用特殊类型 NVARCHAR 或 NCLOB。这些 Nxxx 类型不被直接使用 UTF8(现在是 Oracle 中的默认值)作为编码创建的较新数据库使用。

关于java - JDBC Clob 和 NClob,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42358650/

相关文章:

java - 尝试从小程序切换到 JFrame

java - 在 Spring Web 应用程序中管理用户图像

sql - 使用管理选项创建用户 oracle 11g 命令不起作用

java.lang.NumberFormatException : null error in java while generating invoice number from oracle db

python - 使用 SQL 创建 Oracle 数据库表到另一个 Oracle 数据库的副本

java - 在PreparedStatement中得到错误的输出

java - 通过Java在SQL中创建变量表名?

java - 为什么我会收到错误 "File cannot be resolved to a type"?

Java 中 MySQL 查询 INSERT

java.sql.SQLException : Parameter index out of range (1 > number of parameters, 即 0)。我收到这个错误