Следующий код пытается получить файл CLOB из базы данных Oracle в JDBC.
Код:-
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();
}
}
Я пытаюсь получить файл CLOB из набора результатов index = 1, код выдает следующую ошибку: -
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)
- это очень хакерский метод. Лучше либо выбрать конкретный столбец, либо получить по имени столбца (или и то, и другое). - person lance-java   schedule 31.01.2014