最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle中CLOB,BLOB和NLOB

来源:懂视网 责编:小采 时间:2020-11-09 15:40:07
文档

Oracle中CLOB,BLOB和NLOB

Oracle中CLOB,BLOB和NLOB:SQL 类型 CLOB 在 Java TM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQ
推荐度:
导读Oracle中CLOB,BLOB和NLOB:SQL 类型 CLOB 在 Java TM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQ

SQL 类型 CLOB 在 Java TM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQL CLOB 数据而不是

SQL 类型 CLOB 在 JavaTM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列值。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着CLOB 对象包含一个指向 SQL CLOB 数据而不是数据本身的逻辑指针。Clob 对象在它被创建的事务处理期间有效。

CLOB 接口提供某些方法来获得 SQL CLOB (Character Large Object) 值长度、在客户端实现 CLOB 值以及搜索子字符串或 CLOB 值中的 CLOB 对象。接口 ResultSetCallableStatementPreparedStatement 中的方法(如 getClobsetClob)允许编程人员访问 SQL CLOB 值。此外,此接口还拥有更新 CLOB 值的方法。

Oracle中,Varchar2支持的最大字节数为4KB,所以对于某些长字符串的处理,我们需要用CLOB类型的字段,CLOB字段最大支持4GB。
还有其他几种类型:
blob:二进制,如果exe,zip
clob:单字节码,比如一般的文本文件.
nlob:多字节码,如UTF格式的文件.
以下就是对CLOG字段的操作方法,在我们的项目中帮助文档部分用到。
1、首先是写入

Java代码

  1. /* 以下表PF_HELP_CONTENT中的HCONTENT字段时CLOB类型的 */
  2. // 通过序列器生成帮助ID
  3. Map map = Query.getMap("Select TO_CHAR(SEQ_HID.nextval) HID FROM DUAL ");
  4. hid = String.valueOf(map.get("HID"));
  5. //插入一条数据,注意CLOB字段,需要先插入一个空的clob类型 empty_clob(),然后再单独更新clob字段
  6. sql = "Insert INTO PF_HELP_CONTENT(HID,HCONTENT) VALUES (?,empty_clob()) ";
  7. try
  8. {
  9. //执行插入
  10. rtn = DbUtils.executeUpdate(sql,hid);
  11. /* 插入成功后,修改HCONTENT字段内容 */
  12. //取得数据库连接
  13. Connection conn = DbUtils.getConnection();
  14. //手动提交
  15. conn.setAutoCommit(false);
  16. //定义ResultSet 和 Clob 变量
  17. ResultSet rs = null;
  18. oracle.sql.CLOB clob = null;
  19. //更新SQL
  20. String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";
  21. java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);
  22. //hid是varchar2类型的,所以用setString
  23. pstmt.setString(1,hid);
  24. //执行update语句
  25. rs= pstmt.executeQuery();
  26. if(rs.next())
  27. {
  28. //取得刚才的HCONTENT的内容,也就是刚才添加的empty_clob()
  29. clob = (oracle.sql.CLOB)rs.getClob(1);
  30. }
  31. //需要用clob.getCharacterOutputStream()流方式输出
  32. Writer write = clob.getCharacterOutputStream();
  33. //写入具体内容,helpform.getHContent() 存的是帮助的内容
  34. write.write(helpform.getHContent());
  35. write.flush();
  36. write.close();
  37. rs.close();
  38. //提交
  39. conn.commit();
  40. conn.close();
  41. }
  42. catch(Exception ex)
  43. {
  44. //.........
  45. }

Java代码

  1. /* 以下表PF_HELP_CONTENT中的HCONTENT字段时CLOB类型的 */
  2. // 通过序列器生成帮助ID
  3. Map map = Query.getMap("Select TO_CHAR(SEQ_HID.nextval) HID FROM DUAL ");
  4. hid = String.valueOf(map.get("HID"));
  5. //插入一条数据,注意CLOB字段,需要先插入一个空的clob类型 empty_clob(),然后再单独更新clob字段
  6. sql = "Insert INTO PF_HELP_CONTENT(HID,HCONTENT) VALUES (?,empty_clob()) ";
  7. try
  8. {
  9. //执行插入
  10. rtn = DbUtils.executeUpdate(sql,hid);
  11. /* 插入成功后,修改HCONTENT字段内容 */
  12. //取得数据库连接
  13. Connection conn = DbUtils.getConnection();
  14. //手动提交
  15. conn.setAutoCommit(false);
  16. //定义ResultSet 和 Clob 变量
  17. ResultSet rs = null;
  18. oracle.sql.CLOB clob = null;
  19. //更新SQL
  20. String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";
  21. java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);
  22. //hid是varchar2类型的,所以用setString
  23. pstmt.setString(1,hid);
  24. //执行update语句
  25. rs= pstmt.executeQuery();
  26. if(rs.next())
  27. {
  28. //取得刚才的HCONTENT的内容,也就是刚才添加的empty_clob()
  29. clob = (oracle.sql.CLOB)rs.getClob(1);
  30. }
  31. //需要用clob.getCharacterOutputStream()流方式输出
  32. Writer write = clob.getCharacterOutputStream();
  33. //写入具体内容,helpform.getHContent() 存的是帮助的内容
  34. write.write(helpform.getHContent());
  35. write.flush();
  36. write.close();
  37. rs.close();
  38. //提交
  39. conn.commit();
  40. conn.close();
  41. }
  42. catch(Exception ex)
  43. {
  44. //.........
  45. }


2、修改CLOB字段内容

Java代码

  1. /* 修改跟插入时基本一致,也是用for update来实现 */
  2. //如果修改前的字段内容长度大于当前修改的长度时,末尾的部分内容仍然会存在
  3. //所以在修改内容前,需要将PF_HELP_CONTENT内容置空
  4. sql = " Update PF_HELP_CONTENT SET HCONTENT=empty_clob() Where HID=? ";
  5. try
  6. {
  7. rtn = DbUtils.executeUpdate(sql,hid);
  8. //以下操作跟添加时一样
  9. Connection conn = DbUtils.getConnection();
  10. conn.setAutoCommit(false);
  11. ResultSet rs = null;
  12. oracle.sql.CLOB clob = null;
  13. String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";
  14. java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);
  15. pstmt.setString(1,hid);
  16. rs= pstmt.executeQuery();
  17. if(rs.next())
  18. {
  19. clob = (oracle.sql.CLOB)rs.getClob(1);
  20. }
  21. Writer write = clob.getCharacterOutputStream();
  22. write.write(helpform.getHContent());
  23. write.flush();
  24. write.close();
  25. rs.close();
  26. conn.commit();
  27. conn.close();
  28. }
  29. catch(Exception ex)
  30. {
  31. //...
  32. }

Java代码

  1. /* 修改跟插入时基本一致,也是用for update来实现 */
  2. //如果修改前的字段内容长度大于当前修改的长度时,末尾的部分内容仍然会存在
  3. //所以在修改内容前,需要将PF_HELP_CONTENT内容置空
  4. sql = " Update PF_HELP_CONTENT SET HCONTENT=empty_clob() Where HID=? ";
  5. try
  6. {
  7. rtn = DbUtils.executeUpdate(sql,hid);
  8. //以下操作跟添加时一样
  9. Connection conn = DbUtils.getConnection();
  10. conn.setAutoCommit(false);
  11. ResultSet rs = null;
  12. oracle.sql.CLOB clob = null;
  13. String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? FOR Update ";
  14. java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);
  15. pstmt.setString(1,hid);
  16. rs= pstmt.executeQuery();
  17. if(rs.next())
  18. {
  19. clob = (oracle.sql.CLOB)rs.getClob(1);
  20. }
  21. Writer write = clob.getCharacterOutputStream();
  22. write.write(helpform.getHContent());
  23. write.flush();
  24. write.close();
  25. rs.close();
  26. conn.commit();
  27. conn.close();
  28. }
  29. catch(Exception ex)
  30. {
  31. //...
  32. }



3、取出CLOB字段的文本内容

Java代码

  1. /* 前面部分都一致 */
  2. Connection conn = DbUtils.getConnection();
  3. conn.setAutoCommit(false);
  4. ResultSet rs = null;
  5. oracle.sql.CLOB clob = null;
  6. String sqlclob = "Select HCONTENT FROM PF_HELP_CONTENT Where HID=? ";
  7. java.sql.PreparedStatement pstmt = conn.prepareStatement(sqlclob);
  8. pstmt.setString(1,hid);
  9. rs= pstmt.executeQuery();
  10. if(rs.next())
  11. {
  12. //rs.getClob(1)中参数1指的是HCONTENT字段索引,第一个字段从1开始而不是从0。
  13. //也可以用字段名来取rs.getClob("HCONTENT")
  14. clob = (oracle.sql.CLOB)rs.getClob(1);
  15. }
  16. if(clob==null || clob.length()==0)
  17. {
  18. hcontent = "";
  19. }else
  20. {
  21. //取CLOB字段内容为字符串
  22. hcontent=clob.getSubString((long)1,(int)clob.length());
  23. }
  24. rs.close();
  25. conn.close();
  26. request.setAttribute("HCONTENT",hcontent);

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

Oracle中CLOB,BLOB和NLOB

Oracle中CLOB,BLOB和NLOB:SQL 类型 CLOB 在 Java TM 编程语言中的映射关系。SQL CLOB 是内置类型,它将 Character Large Object 存储为数据库表的某一行中的一个列。默认情况下,驱动程序使用 SQL locator(CLOB) 实现 Clob 对象,这意味着 CLOB 对象包含一个指向 SQ
推荐度:
标签: 类型 sql oracle
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top