Jdbc 使用准备好的语句setcharacterstream h2数据库时输入null

Jdbc 使用准备好的语句setcharacterstream h2数据库时输入null,jdbc,prepared-statement,h2,clob,Jdbc,Prepared Statement,H2,Clob,我正在尝试使用preparedstatement向clob添加值,如h2网站上给出的。setcharacterstream(arg,reader)空值插入数据库中 Connection con=getConnection(); pstmnt=con.prepareStatement(sql); int paramcounter=1; for (Object object : param) { if(paramcounter==1) {

我正在尝试使用preparedstatement向clob添加值,如h2网站上给出的。setcharacterstream(arg,reader)空值插入数据库中

Connection con=getConnection();
    pstmnt=con.prepareStatement(sql);
    int paramcounter=1;
    for (Object object : param) {
        if(paramcounter==1) {
            int len=object.toString().length();
            Reader rdr=new StringReader(object.toString());
            pstmnt.setCharacterStream(1, rdr,len);; 
        }
        else{
            pstmnt.setObject(paramcounter, object);
        }           
        paramcounter++;
    }       
    int retvalue=pstmnt.executeUpdate();
    closeConnection();

我们没有足够的信息来清楚地确定您可能遇到困难的原因,但以下代码对我很有用:

包装测试;
导入java.io.*;
导入java.nio.charset.StandardCharset;
导入java.sql.*;
公共类H2testMain{
公共静态void main(字符串[]args){
连接con=null;
试一试{
//创建内存中数据库(“…mem:…”)
con=DriverManager.getConnection(“jdbc:h2:mem:”);
语句s=null;
试一试{
s=con.createStatement();
s、 执行(“创建表Table1(column1clob)”;
InputStream is=新文件InputStream(“C://\uu tmp/MIME/stuff.txt”);
Reader rdr=新的InputStreamReader(is,StandardCharsets.ISO_8859_1);
准备好的报表ps=con.prepareStatement(
“在表1(第1列)中插入值(?);
ps.setCharacterStream(1,rdr);
ps.executeUpdate();
结果集rs=s.executeQuery(
“从表1中选择第1列”);
int rowNumber=0;
while(rs.next()){
String str=rs.getString(“Column1”);
System.out.println(
字符串格式(
“行%d:CLOB的长度为%d个字符。”,
++行数,
str.length());
}
rs.close();
}捕获(例外e){
e、 printStackTrace();
}最后{
con.close();
}
}捕获(SQLE异常){
e、 printStackTrace();
}
}
}
它读取文本文件

02/15/2014 10:55 358785 stuff.txt
将文件内容写入H2数据库中的CLOB列,从数据库读回数据,并生成以下控制台输出:

第1行:CLOB的长度为358785个字符。