0
java.sql.Clob
和java.sql.NClob
之间是否有区别? java.sql.NClob
接口没有新的方法。我试过如下:JDBC Clob和NClob
的设置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
NCLOBs列使用数据库的国家字符集,而CLOB使用数据库的字符集。如果您有特殊类型的数据不受数据库默认字符集支持,那么您可以创建N(CLOB,VARCHAR2等)列来存储数据。 http://stackoverflow.com/questions/6854609/what-is-the-difference-between-clob-and-nclob – JSapkota
是的,我在发布这个问题之前阅读了该线程。我不能拿出一个例子来看看区别。 – user2018791
如果两个字符集都能够存储您输入的字符,则没有区别。如果我没有弄错,那么在UTF-16中只能使用UTF-8表示的字符很少,不能用UTF-8表示。如果'NLS_CHARACTERSET'是单字节字符集,则会有区别。 –