`

Java操作含Clob或者NClob数据类型的存储过程实例

    博客分类:
  • J2SE
阅读更多
最近用到Oracle中的NClob,在网上找来几天,终于东拼西凑,搞出来啦,拿来跟大家分享一下!

创建一个简单的表test

CREATE TABLE "SINI"."TEST" 
   ( "ID" NUMBER(10,0), 
"CONTENT" CLOB
   )


--向表test中插入数据的存储过程 insertTest
CREATE OR REPLACE PROCEDURE insertTest
( 
myid test.id%TYPE, 
mycontent test.content%TYPE

) 
AS 
BEGIN 
--向表中插入数据 
INSERT INTO test(id,content) VALUES(myid,mycontent); 
END insertTest;

测试类:

package com.sini.notice.test;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import oracle.jdbc.OracleConnection;
import oracle.sql.CLOB;

public class Test {

private Connection conn = null;
private String url = null;
private String user = null;
private String password = null;

public Test() {
   url = "jdbc:oracle:thin:@192.168.1.108:1521:hqh";
   user = "sini";
   password = "sini";
}


public Connection getConnection() {

   try {
    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
    conn = DriverManager.getConnection(url, user, password);
    System.out.println("connect is ok");
    return conn;
   } catch (InstantiationException e) {
    e.printStackTrace();
    return null;
   } catch (IllegalAccessException e) {
    e.printStackTrace();
    return null;
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
    return null;
   } catch (SQLException e) {
    e.printStackTrace();
    return null;
   }
}

public void testInsert() {
   try {
    Connection con = getConnection();
    CallableStatement proc = con.prepareCall(
      "{ call insertTest(?,?) }");
    proc.setInt(1, 1);
    CLOB clob = new CLOB((OracleConnection) con);
      clob = oracle.sql.CLOB.createTemporary(con,false,1);
    //对CLOB对象赋值
      clob.putString(1,"fffffffffjggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggffffffffffffff");
      proc.setClob(2,clob);
      
    proc.execute();
   } catch (SQLException ex2) {
    ex2.printStackTrace();
   } catch (Exception ex2) {
    ex2.printStackTrace();
   } finally {
    try {
     if (conn != null) {
      conn.close();
     }
    } catch (SQLException ex1) {
    }
   }
}

    public static void main(String[] args) {
     Test test = new Test();
   test.testInsert();
    }

}


注意:如果出现错误“无法从套接字读取更多的数据”,

解决办法:将Oracle9i的JAR包换成Oracle10g的JAR包即可(我用的是ojdbc14.jar,1.29M,注意大小哦)。(此信息来自http://www.100631.com/blog/article.asp?id=318)

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics