首页 > 技术文章 > oracle存储大文本clob、blob

buffercache 2018-12-27 16:15 原文

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)

推荐阅读