【发布时间】:2014-01-31 13:52:06
【问题描述】:
以下代码尝试在 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();
}
}
我正在尝试从结果集 index=1 中检索 CLOB 文件。代码给了我以下错误:-
Exception in thread "main" java.lang.NullPointerException
at jdbc.Retrieving_Clob.main(Retrieving_Clob.java:41)
错误的行是:-
while((ch= r.read())!= -1)
错误的原因是什么以及如何解决问题?
注意:-在给定位置会创建一个指定名称的空白文件。
【问题讨论】:
-
使用
select *然后调用ResultSet.getX(1)是非常hacky。最好选择特定列或通过列名(或两者)获取。