Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Oracle 10g重新设置CLOB时出错_Java_Oracle_Jdbc_Clob - Fatal编程技术网

Java 从Oracle 10g重新设置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

下面的代码尝试从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();
}
}
我正在尝试从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,这是一个不同的问题: