最近用到Oracle中的NClob,在网上找来几天,终于东拼西凑,搞出来啦,拿来跟大家分享一下!

创建一个简单的表test


  
  1. CREATE TABLE "SINI"."TEST"   
  2. "ID" NUMBER(10,0),   
  3. "CONTENT" CLOB  
  4. )  
  5.  
  6.  
  7. --向表test中插入数据的存储过程 insertTest  
  8. CREATE OR REPLACE PROCEDURE insertTest  
  9. (   
  10. myid test.id%TYPE,   
  11. mycontent test.content%TYPE  
  12.  
  13. )   
  14. AS   
  15. BEGIN   
  16. --向表中插入数据   
  17. INSERT INTO test(id,content) VALUES(myid,mycontent);   
  18. END insertTest; 

测试类:


  
  1. package com.sini.notice.test;  
  2.  
  3. import java.sql.CallableStatement;  
  4. import java.sql.Connection;  
  5. import java.sql.DriverManager;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8. import java.sql.Types;  
  9.  
  10. import oracle.jdbc.OracleConnection;  
  11. import oracle.sql.CLOB;  
  12.  
  13. public class Test {  
  14.  
  15. private Connection conn = null;  
  16. private String url = null;  
  17. private String user = null;  
  18. private String password = null;  
  19.  
  20. public Test() {  
  21. url = "jdbc:oracle:thin:@192.168.1.108:1521:hqh";  
  22. user = "sini";  
  23. password = "sini";  
  24. }  
  25.  
  26.  
  27. public Connection getConnection() {  
  28.  
  29. try {  
  30. Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();  
  31. conn = DriverManager.getConnection(url, userpassword);  
  32. System.out.println("connect is ok");  
  33. return conn;  
  34. } catch (InstantiationException e) {  
  35. e.printStackTrace();  
  36. return null;  
  37. } catch (IllegalAccessException e) {  
  38. e.printStackTrace();  
  39. return null;  
  40. } catch (ClassNotFoundException e) {  
  41. e.printStackTrace();  
  42. return null;  
  43. } catch (SQLException e) {  
  44. e.printStackTrace();  
  45. return null;  
  46. }  
  47. }  
  48.  
  49. public void testInsert() {  
  50. try {  
  51. Connection con = getConnection();  
  52. CallableStatement proc = con.prepareCall(  
  53. "{ call insertTest(?,?) }");  
  54. proc.setInt(1, 1);  
  55. CLOB clob = new CLOB((OracleConnection) con);  
  56. clob = oracle.sql.CLOB.createTemporary(con,false,1);  
  57. //对CLOB对象赋值  
  58. clob.putString(1,"fffffffffjggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggffffffffffffff");  
  59. proc.setClob(2,clob);  
  60.  
  61. proc.execute();  
  62. } catch (SQLException ex2) {  
  63. ex2.printStackTrace();  
  64. } catch (Exception ex2) {  
  65. ex2.printStackTrace();  
  66. } finally {  
  67. try {  
  68. if (conn != null) {  
  69. conn.close();  
  70. }  
  71. } catch (SQLException ex1) {  
  72. }  
  73. }  
  74. }  
  75.  
  76. public static void main(String[] args) {  
  77. Test test = new Test();  
  78. test.testInsert();  
  79. }  


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

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