以下代码尝试从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.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();
}
}
我正在尝试从结果集索引= 1中检索CLOB文件。代码给出了以下错误: -
Exception in thread "main" java.lang.NullPointerException
at jdbc.Retrieving_Clob.main(Retrieving_Clob.java:41)
错误的行是: -
while((ch= r.read())!= -1)
错误的原因是什么以及如何解决问题?
注意: - 在指定位置创建提供名称的空白文件。
答案 0 :(得分:1)
错误表明r
为NULL。你从r
得到了:{/ p>
Reader r = rs.getCharacterStream(1);
从http://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getCharacterStream%28int%29 :( getCharacterStream)返回: 包含列值的java.io.Reader对象; 如果值为SQL NULL,则在Java编程语言中返回的值为null 。
所以看起来列值为NULL。
答案 1 :(得分:0)
问题的原因显然是r
只是null
的事实。解决将在此变量中对null
进行额外检查:
if (r != null) ... while...
。