从Oracle 10g中恢复CLOB时出错

时间:2014-01-31 13:52:06

标签: 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.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)

错误的原因是什么以及如何解决问题?

注意: - 在指定位置创建提供名称的空白文件。

2 个答案:

答案 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...