Java 从Oracle 10g重新设置CLOB时出错
下面的代码尝试从JDBC中的oracle数据库检索CLOB文件 代码:-Java 从Oracle 10g重新设置CLOB时出错,java,oracle,jdbc,clob,Java,Oracle,Jdbc,Clob,下面的代码尝试从JDBC中的oracle数据库检索CLOB文件 代码:- import java.io.FileWriter; import java.io.Reader; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.Pro
import java.io.FileWriter;
import java.io.Reader;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Properties;
public class Retrieving_Clob {
public static void main(String[] args) throws Exception{
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Properties p = new Properties();
p.put("user", "system");
p.put("password", "password");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe",p);
PreparedStatement pstmt = con.prepareStatement("select * from myclob");
ResultSet rs = pstmt.executeQuery();
rs.next();
Reader r = rs.getCharacterStream(1);
int ch;
File file = new File("H:/newFile.txt");
FileWriter fw = new FileWriter(file,true);
while((ch= r.read())!= -1)
fw.write((char)ch);
fw.close();
con.close();
}
}
我正在尝试从resultset index=1检索CLOB文件。代码显示以下错误:-
Exception in thread "main" java.lang.NullPointerException
at jdbc.Retrieving_Clob.main(Retrieving_Clob.java:41)
错误的路线是:-
while((ch= r.read())!= -1)
错误的原因是什么?如何解决问题
注意:-将在给定位置创建一个具有所提供名称的空白文件。问题的原因显然是
r
只是null
。解决方法是在此变量中附加检查null
:
如果(r!=null)。。。而…
错误表明r
为空。您将从以下位置获得r
:
Reader r = rs.getCharacterStream(1);
From:(getCharacterStream)返回:
包含列值的java.io.Reader对象如果值为SQL NULL,则返回的值在Java编程语言中为NULL
因此,列值似乎为空。使用
select*
然后调用ResultSet.getX(1)
是非常有技巧的。最好选择特定的列或通过列名获取(或同时使用两者)。Thnks。我观察到,如果我只是设置Id(整数),然后尝试通过JDBC为给定Id更新clob值,我的程序显示成功,但Oracle显示它为空。然而,如果我同时更新这两个值,那么就没有问题了。知道为什么吗?使用Oracle 10g Xe。我不明白。您正在更新哪些值?我的表按顺序得到了两个值(CLOB,INT)。如果我只更新SQL命令中的INT,然后使用JDBC代码中的WHERE子句更新CLOB文件以匹配表中已经存在的INT值,则会出现上述错误。但是,如果我从JDBC同时更新这两个(CLOB,INT),那么它就可以正常工作。这听起来应该是一个单独的问题,因为我在您的代码中没有看到任何正在进行更新的内容。请查看以下链接,关于Blob,这是一个不同的问题: