最近用到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)
转载于:https://blog.51cto.com/huqianhao/954764