oracle存储大文本clob、blob

1 package cn.itcast.web.oracle.util;
2
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.ResultSet;
6 import java.sql.Statement;
7
8 public class JdbcUtil {
9 private static String driver = "oracle.jdbc.driver.OracleDriver";
10 //1521是主端口,也可能是其它端口去连接oracle数据库
11 private static String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
12 private static String username = "scott";
13 private static String password = "friends";
14 private static Connection conn;
15 private static Statement stmt;
16 private static ResultSet rs;
17 //注册数据库驱动
18 static{
19 try {
20 Class.forName(driver);
21 } catch (Exception e) {
22 e.printStackTrace();
23 throw new RuntimeException("oracle驱动注册失败");
24 }
25 }
26 //获取数据库连接
27 public static Connection getConnection(){
28 Connection conn = null;
29 try {
30 conn = DriverManager.getConnection(url,username,password);
31 } catch (Exception e) {
32 e.printStackTrace();
33 throw new RuntimeException("oracle连接获取失败");
34 }
35 return conn;
36 }
37 //关闭连接对象
38 public static void close(Connection conn){
39 if(conn!=null){
40 try {
41 conn.close();
42 } catch (Exception e) {
43 e.printStackTrace();
44 throw new RuntimeException("oracle连接关闭失败");
45 }
46 }
47 }
48 public static void close(Statement stmt){
49 if(stmt!=null){
50 try {
51 stmt.close();
52 } catch (Exception e) {
53 e.printStackTrace();
54 throw new RuntimeException("oracle连接关闭失败");
55 }
56 }
57 }
58 public static void close(ResultSet rs){
59 if(rs!=null){
60 try {
61 rs.close();
62 } catch (Exception e) {
63 e.printStackTrace();
64 throw new RuntimeException("oracle连接关闭失败");
65 }
66 }
67 }
68 }

1 package cn.itcast.web.oracle.dao;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.FileReader;
7 import java.io.FileWriter;
8 import java.io.InputStream;
9 import java.io.OutputStream;
10 import java.io.Reader;
11 import java.io.Writer;
12 import java.net.URL;
13 import java.sql.Connection;
14 import java.sql.PreparedStatement;
15 import java.sql.ResultSet;
16
17 import org.junit.Test;
18
19 import cn.itcast.web.oracle.util.JdbcUtil;
20
21 //Java测试oracle数据库存取大对象
22 /*
23 create table test_clob(
24 id number primary key,
25 content clob not null
26 );
27 create table test_blob(
28 id number primary key,
29 content blob not null
30 );
31 */
32 public class LobDao {
33 //测试clob对象(存)
34 @Test
35 public void saveClobToOracle() throws Exception{
36 Connection conn = JdbcUtil.getConnection();
37 String sql = "insert into test_clob(id,content) values(?,?)";
38 PreparedStatement pstmt = conn.prepareStatement(sql);
39 pstmt.setInt(1,1);
40 //加载文件
41 URL url = LobDao.class.getClassLoader().getResource("cn/itcast/web/oracle/db/xx.txt");
42 String path = url.getPath();
43 File file = new File(path);
44 //获取文件的reader字符流对象
45 Reader reader = new FileReader(file);
46 //为第二个?占位符设置值
47 pstmt.setCharacterStream(2,reader,(int)file.length());
48 int i = pstmt.executeUpdate();
49 System.out.println(i>0?"操作成功":"操作失败");
50 reader.close();
51 JdbcUtil.close(pstmt);
52 JdbcUtil.close(conn);
53 }
54 //测试clob对象(取)
55 @Test
56 public void getClobFormOracle() throws Exception{
57 Connection conn = JdbcUtil.getConnection();
58 String sql = "select content from test_clob where id = 1";
59 PreparedStatement pstmt = conn.prepareStatement(sql);
60 ResultSet rs = pstmt.executeQuery();
61 Reader reader = null;
62 Writer writer = null;
63 while(rs.next()){
64 reader = rs.getCharacterStream("content");
65 writer = new FileWriter("d:/copy_xx.txt");
66 int len = 0;
67 char[] cuf = new char[1024];
68 while((len = reader.read(cuf))>0){
69 writer.write(cuf,0,len);
70 }
71 }
72 reader.close();
73 writer.close();
74 JdbcUtil.close(rs);
75 JdbcUtil.close(pstmt);
76 JdbcUtil.close(conn);
77 }
78 //测试blob对象(存)
79 @Test
80 public void saveBlobToOracle() throws Exception{
81 Connection conn = JdbcUtil.getConnection();
82 String sql = "insert into test_blob(id,content) values(?,?)";
83 PreparedStatement pstmt = conn.prepareStatement(sql);
84 pstmt.setInt(1,1);
85
86 URL url = LobDao.class.getClassLoader().getResource("cn/itcast/web/oracle/db/image.jpg");
87 String path = url.getPath();
88 File file = new File(path);
89 InputStream inputStream = new FileInputStream(file);
90 pstmt.setBinaryStream(2,inputStream,(int)file.length());
91
92 int i = pstmt.executeUpdate();
93 System.out.println(i>0?"操作成功":"操作失败");
94
95 inputStream.close();
96 JdbcUtil.close(pstmt);
97 JdbcUtil.close(conn);
98 }
99 //测试blob对象(取)
100 @Test
101 public void getBlobFromOracle() throws Exception{
102 Connection conn = JdbcUtil.getConnection();
103 String sql = "select content from test_blob where id = 1";
104 PreparedStatement pstmt = conn.prepareStatement(sql);
105 ResultSet rs = pstmt.executeQuery();
106 InputStream is = null;
107 OutputStream os = null;
108 while(rs.next()){
109 is = rs.getBinaryStream("content");
110 os = new FileOutputStream("d:/copy_image.jpg");
111 byte[] buf = new byte[1024];
112 int len = 0;
113 while((len=is.read(buf))>0){
114 os.write(buf,0,len);
115 }
116 }
117 is.close();
118 os.close();
119 JdbcUtil.close(rs);
120 JdbcUtil.close(pstmt);
121 JdbcUtil.close(conn);
122 }
123 }

文本:CLOB(Character)
多媒体:BLOB(Binary)

oracle存储大文本clob、blob的更多相关文章

  1. panzer 电力项目十一--hibernate操作大文本字段Blob和Clob

    hibernate操作大文本字段Blob和Clob解决方案: 1.大文本字段Blob和Clob(流); 2.截串存取 第一步: 创建新表:Elec_CommonMsg_Content create t ...

  2. JDBC中级篇(MYSQL)——处理大文本(CLOB)

    注意:其中的JdbcUtil是我自定义的连接工具类:代码例子链接: package b_blob_clob; import java.io.FileNotFoundException; import ...

  3. JDBC 复习3 存取Oracle大数据 clob blob

    1 目录结构记得导包咯 mysql oracle 2 代码,DBUtil工具类见前面的随笔博文 package dbex.mysql; import java.io.BufferedReader; i ...

  4. 深入浅出JDBC-操作时间与大对象(Clob/Blob)

    一.时间(Date.Time.Timestamp) java.sql.Date/java.sql.Time/java.sql.Timestamp extends java.util.Date publ ...

  5. 利用JDBC处理mysql大数据--大文本和二进制文件等

    转载自http://www.cnblogs.com/xdp-gacl/p/3982581.html 一.基本概念 大数据也称之为LOB(Large Objects),LOB又分为:clob和blob, ...

  6. 使用jdbc存储图片和大文本

    package cn.itcast.i_batch; import java.sql.Connection; import java.sql.PreparedStatement; import jav ...

  7. jdbc基础 (三) 大文本、二进制数据处理

    LOB (Large Objects)   分为:CLOB和BLOB,即大文本和大二进制数据 CLOB:用于存储大文本 BLOB:用于存储二进制数据,例如图像.声音.二进制文件 在mysql中,只有B ...

  8. 使用JDBC处理MySQL大文本和大数据

    LOB,Large Objects,是一种用于存储大对象的数据类型,一般LOB又分为BLOB与CLOB.BLOB通常用于存储二进制数据,比如图片.音频.视频等.CLOB通常用于存储大文本,比如小说. ...

  9. oracle对大对象类型操作:blob,clob,nclob

     1.基本介绍 Oracle和plsql都支持lob(large object) 类型,用来存储大数量数据,如图像文件,声音文件等.Oracle 9i realse2支持存储最大为4g的数据,or ...

随机推荐

  1. Sql显示16进制

    select cast(id as varbinary(4)) from tableTest

  2. 使用js请求Servlet时的路径

    项目结构如下: 全是web的html页面 js部分重要代码: function ajaxValidate() { var flag=false; $.ajax({ "url":&q ...

  3. CSS 快速学习

    [快速学习让我不再思考太多,更多专注在一个 box 当中,上下文朝着正交方向前进~] [Think small,]https://learnxinyminutes.com/docs/zh-cn/css ...

  4. 多线程this逃逸

    this逃逸,  是指在构造函数返回之前,其它线程就持有该对象的引用,调用尚未构造完全的对象的方法,可能引发令人疑惑的错误,应该避免this逃逸事件的发生. this逃逸经常发生在构造函数中启动线程或 ...

  5. ue4 socket

    Socket 地址: TSharedRef<FInternetAddr> internetAddr = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSY ...

  6. 百度地图API的应用

    做网页的时候,有时候需要有地图的功能.接下来我来记录一下我的做法. 1.引入API秘钥,在网上都可以搜到. <script src="http://api.map.baidu.com/ ...

  7. Kotlin中构造方法的参数var val 和 什么都没有的区别

    1.什么都没有,在该类中使不能使用的, 这个参数的作用就是,传递给父类的构造方法 2.使用var 可以在类中使用,相当于 我们声明了一个该类中定义了一个private 的成员变量 3.val表示不让修 ...

  8. Exception:两个类具有相同的 XML 类型名称,请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称

    具体报错:  找到报错的类: 对XmlType重新命名(最简单粗暴的方法):

  9. MyBatis-Plus的简单使用

    mybatis-plus也只是听过,可是终究没有使用过.于是自己花几天晚上的时间研究mybatis-plus的使用. 下面的研究也是基于其官网:http://mp.baomidou.com/guide ...

  10. JS调用函数时候加括号与只写函数名字的区别 fn与fn()的区别

    经常见插件里面函数调用的时候只写个函数名字,不写函数参数,甚至连括号也不写,比如说: <!DOCTYPE html> <html> <head> <meta ...