使用ojdbc14.jar-JAVA插入CLOB

使用ojdbc14.jar-JAVA插入CLOB,java,oracle,jsp,jar,ojdbc,Java,Oracle,Jsp,Jar,Ojdbc,下面是我与ojdbc14.jar一起使用的Java代码 OraclePreparedStatement stAddNews; String queryAddNews = "INSERT INTO CMS_NEWS_ITEMS (CNI_TITLE, CNI_SHORTTITLE, CNI_DATE, CNI_CONTENT, CNI_CREATEDBY, CNI_CREATEDFROM, CNI_ONMOBILE, CNI_ONSLIDER, CNI_CREATEDON, CNI_STATUS,

下面是我与ojdbc14.jar一起使用的Java代码

OraclePreparedStatement stAddNews;
String queryAddNews = "INSERT INTO CMS_NEWS_ITEMS (CNI_TITLE, CNI_SHORTTITLE, CNI_DATE, CNI_CONTENT, CNI_CREATEDBY, CNI_CREATEDFROM, CNI_ONMOBILE, CNI_ONSLIDER, CNI_CREATEDON, CNI_STATUS, CNI_ID, CNI_IMAGEID) VALUES (?,?,?,?,?,?,?,?,SYSDATE,'ACTIVE','"+newsItemId+"','"+newsItemId+"')";
System.out.println(queryAddNews);
stAddNews = (OraclePreparedStatement) con.prepareStatement(queryAddNews);


Clob myClob = con.createClob();
myClob.setString(1,replaceImgNewsCont);

stAddNews.setString(1, itemTitle);
stAddNews.setString(2, shortTitle);
stAddNews.setString(3, date);
stAddNews.setClob(4,myClob);

stAddNews.executeUpdate();
stAddNews.clearParameters();
stAddNews.close();
con.close();

上面的代码可以很好地与ojdbc6.jar配合使用,但是这个(setClob())不能与ojdbc14配合使用。我是否可以使用ojdbc14.jar完成同样的任务。有什么建议吗?

这段代码适用于odbc14.jar

String strObjID="OBJ00015";
String strContent="asdasdasdas<asdasd>adasdasdasdsadsad";

PreparedStatement pstmt = con.prepareStatement("INSERT INTO TMP_FILE2(ID,FILECONTENT) values(?,EMPTY_CLOB())");
pstmt.setString(1,strObjID);
//pstmt.setClob(2, clob);
pstmt.executeUpdate();
pstmt.close();

//updating CLOB column with String value
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String query="Select FILECONTENT FROM TMP_FILE2 where ID=0001 FOR UPDATE";
con.setAutoCommit(false);
ResultSet resultset=stmt.executeQuery(query);

if(resultset.next()){
    oracle.sql.CLOB    clobnew = ((oracle.jdbc.OracleResultSet) resultset).getCLOB("FILECONTENT");

    byte[] bytes = strContent.getBytes();
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    InputStreamReader isr = new InputStreamReader(bais);
    PrintWriter pw = new PrintWriter(clobnew.getCharacterOutputStream() );

    BufferedReader br = new BufferedReader(isr);
    //new FileReader( new File("D:\\test.txt") ) );
    String  lineIn = null;
    while( ( lineIn = br.readLine() ) != null )
      pw.println( lineIn );
      pw.close();
      br.close();
}
con.setAutoCommit(true);
con.commit();
String strObjID=“OBJ00015”;
字符串strContent=“asdasdasdasdasad”;
PreparedStatement pstmt=con.prepareStatement(“插入TMP_文件2(ID,文件内容)值(?,空的_CLOB())”;
pstmt.setString(1,strObjID);
//pstmt.setClob(2,clob);
pstmt.executeUpdate();
pstmt.close();
//使用字符串值更新CLOB列
语句stmt=con.createStatement(ResultSet.TYPE\u SCROLL\u敏感,ResultSet.CONCUR\u可更新);
String query=“从TMP_文件2中选择文件内容,其中ID=0001进行更新”;
con.setAutoCommit(假);
ResultSet ResultSet=stmt.executeQuery(查询);
if(resultset.next()){
oracle.sql.CLOB clobnew=((oracle.jdbc.OracleResultSet)resultset).getCLOB(“文件内容”);
byte[]bytes=strContent.getBytes();
ByteArrayInputStream bais=新的ByteArrayInputStream(字节);
InputStreamReader isr=新的InputStreamReader(BAI);
PrintWriter pw=新的PrintWriter(clobnew.getCharacterOutputStream());
BufferedReader br=新的BufferedReader(isr);
//新文件读取器(新文件(“D:\\test.txt”);
字符串lineIn=null;
而((lineIn=br.readLine())!=null)
pw.println(lineIn);
关闭();
br.close();
}
con.setAutoCommit(真);
con.commit();

首先需要插入一个空的CLOB,然后更新特定列中的CLOB值。

这段代码适用于odbc14.jar

String strObjID="OBJ00015";
String strContent="asdasdasdas<asdasd>adasdasdasdsadsad";

PreparedStatement pstmt = con.prepareStatement("INSERT INTO TMP_FILE2(ID,FILECONTENT) values(?,EMPTY_CLOB())");
pstmt.setString(1,strObjID);
//pstmt.setClob(2, clob);
pstmt.executeUpdate();
pstmt.close();

//updating CLOB column with String value
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String query="Select FILECONTENT FROM TMP_FILE2 where ID=0001 FOR UPDATE";
con.setAutoCommit(false);
ResultSet resultset=stmt.executeQuery(query);

if(resultset.next()){
    oracle.sql.CLOB    clobnew = ((oracle.jdbc.OracleResultSet) resultset).getCLOB("FILECONTENT");

    byte[] bytes = strContent.getBytes();
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    InputStreamReader isr = new InputStreamReader(bais);
    PrintWriter pw = new PrintWriter(clobnew.getCharacterOutputStream() );

    BufferedReader br = new BufferedReader(isr);
    //new FileReader( new File("D:\\test.txt") ) );
    String  lineIn = null;
    while( ( lineIn = br.readLine() ) != null )
      pw.println( lineIn );
      pw.close();
      br.close();
}
con.setAutoCommit(true);
con.commit();
String strObjID=“OBJ00015”;
字符串strContent=“asdasdasdasdasad”;
PreparedStatement pstmt=con.prepareStatement(“插入TMP_文件2(ID,文件内容)值(?,空的_CLOB())”;
pstmt.setString(1,strObjID);
//pstmt.setClob(2,clob);
pstmt.executeUpdate();
pstmt.close();
//使用字符串值更新CLOB列
语句stmt=con.createStatement(ResultSet.TYPE\u SCROLL\u敏感,ResultSet.CONCUR\u可更新);
String query=“从TMP_文件2中选择文件内容,其中ID=0001进行更新”;
con.setAutoCommit(假);
ResultSet ResultSet=stmt.executeQuery(查询);
if(resultset.next()){
oracle.sql.CLOB clobnew=((oracle.jdbc.OracleResultSet)resultset).getCLOB(“文件内容”);
byte[]bytes=strContent.getBytes();
ByteArrayInputStream bais=新的ByteArrayInputStream(字节);
InputStreamReader isr=新的InputStreamReader(BAI);
PrintWriter pw=新的PrintWriter(clobnew.getCharacterOutputStream());
BufferedReader br=新的BufferedReader(isr);
//新文件读取器(新文件(“D:\\test.txt”);
字符串lineIn=null;
而((lineIn=br.readLine())!=null)
pw.println(lineIn);
关闭();
br.close();
}
con.setAutoCommit(真);
con.commit();

首先,您需要插入一个空的CLOB,然后更新特定列中的CLOB值。

上面的答案很有帮助,但在得到答案是共享的概念后,我仍然遇到了其他问题。因此,我想分享我的解决方案:

要使用CLOB插入新行,请执行以下操作:

conn.setAutoCommit(假);
编制报表;
//使用empty_clob()函数为要更新的列设置空clob值,
//以避免以后出现空指针异常。
String sql=“更新集=空_clob()”;
sql+=“”;
pStmt=conn.prepareStatement(sql);
pStmt.executeUpdate(sql);
//使用选择。。。要更新以检索目标行,
//以获得写入该行的权限。
String sql=“从中选择”;
sql+=“用于更新”;
pStmt=conn.prepareStatement(sql);
结果集rs=pStmt.executeQuery();
如果(rs.next()){
oracle.sql.CLOB CLOB=((oracle.jdbc.OracleResultSet)rs.getCLOB(“”);
//如果列的值为null或空字符串,则在下一行将出现null指针异常。
java.io.Writer w=clob.getCharacterOutputStream();
w、 写入(data.toString().toCharray());
w、 冲洗();
//如果未使用SELECT…FOR UPDATE语句,可能会导致“ORA-22920包含LOB值的行未锁定”错误。
w、 close();
}
conn.setAutoCommit(正确);
conn.commit();
此外,要使用CLOB更新行,请执行以下操作:

conn.setAutoCommit(假);
编制报表;
//插入一行,其中包含要设置的值,
//并将CLOB列设置为空白,或使用空的_CLOB()函数
//以确保列的值不会为null或空字符串。
字符串sql=“插入到选择,”,“从双”;
pStmt=conn.prepareStatement(sql);
pStmt.executeUpdate(sql);
//检索我们刚刚插入的行。
//由于更新尚未提交,
//我们已经有写这行的特权了,
//这里不需要使用SELECT…FOR UPDATE语句。
sql=“从中选择”;
sql+=“”;
pStmt=conn.prepareStatement(sql);
结果集rs=pStmt.executeQuery();
如果(rs.next()){
oracle.sql.CLOB CLOB=((oracle.jdbc.OracleResultSet)rs.getCLOB(“”);
java.io.Writer w=clob.getCharacterOutputStream();
w、 写入(data.toString().toCharray());
w、 冲洗();
w、 close();
}
conn.setAutoCommit(正确);
conn.commit();

上面的答案很有帮助,但在我意识到答案是共享之后,我仍然遇到了其他问题。因此,我想分享我的解决方案:

要使用CLOB插入新行,请执行以下操作:

conn.setAutoCommit(假);
编制报表;
//使用empty_clob()函数为要更新的列设置空clob值,
//以避免以后出现空指针异常。
String sql=“更新集=空_clob()”;
sql+=“”;
pStmt=conn.prepareStatement(sql);
pStmt.executeUpdate(sql);
//使用选择。。。要更新以检索目标行,
//以获得写入该行的权限。
String sql=“从中选择”;
sql+=”