jdbc java数据库连接 11)中大文本类型的处理

Posted 卡拉瓦

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdbc java数据库连接 11)中大文本类型的处理相关的知识,希望对你有一定的参考价值。

1. Jdbc中大文本类型的处理

Oracle中大文本数据类型,

  Clob    长文本类型   (mysql中不支持,使用的是text

  Blob    二进制类型

 

MySQL数据库,

  Text    长文本类型

  Blob    二进制类型

 

需求: jdbc中操作长文本数据。

设计: 测试表

编码:

  保存大文本数据类型

  读取大文本数据类型

  保存二进制数据

  读取二进制数据

 

MYSQL:

1 -- 测试大数据类型
2 CREATE TABLE test(
3      id INT PRIMARY KEY AUTO_INCREMENT,
4      content LONGTEXT,
5      img LONGBLOB
6 );

 

java:

  1 public class App_text {
  2     
  3     // 全局参数
  4     private Connection con;
  5     private Statement stmt;
  6     private PreparedStatement pstmt;
  7     private ResultSet rs;
  8     
  9 
 10     @Test
 11     // 1. 保存大文本数据类型   ( 写longtext)
 12     public void testSaveText() {
 13         String sql = "insert into test(content) values(?)";
 14         try {
 15             // 连接
 16             con = JdbcUtil.getConnection();
 17             // pstmt 对象
 18             pstmt = con.prepareStatement(sql);
 19             // 设置参数
 20             // 先获取文件路径
 21             String path = App_text.class.getResource("tips.txt").getPath();
 22             FileReader reader = new FileReader(new File(path));
 23             pstmt.setCharacterStream(1, reader);
 24             
 25             // 执行sql
 26             pstmt.executeUpdate();
 27             
 28             // 关闭
 29             reader.close();
 30         } catch (Exception e) {
 31             e.printStackTrace();
 32         } finally {
 33             JdbcUtil.closeAll(con, pstmt, null);
 34         }
 35     }
 36     
 37     @Test
 38     // 2. 读取大文本数据类型   ( 读longtext)
 39     public void testGetAsText() {
 40         String sql = "select * from  test;";
 41         try {
 42             // 连接
 43             con = JdbcUtil.getConnection();
 44             // pstmt 对象
 45             pstmt = con.prepareStatement(sql);
 46             // 读取
 47             rs = pstmt.executeQuery();
 48             if (rs.next()) {
 49                 // 获取长文本数据, 方式1:
 50                 //Reader r = rs.getCharacterStream("content");
 51                 
 52                 // 获取长文本数据, 方式2:
 53                 System.out.print(rs.getString("content"));
 54             }
 55             
 56         } catch (Exception e) {
 57             e.printStackTrace();
 58         } finally {
 59             JdbcUtil.closeAll(con, pstmt, null);
 60         }
 61     }
 62 }
 63 
 64 
 65 blob
 66 
 67 public class App_blob {
 68     
 69     // 全局参数
 70     private Connection con;
 71     private Statement stmt;
 72     private PreparedStatement pstmt;
 73     private ResultSet rs;
 74     
 75 
 76     @Test
 77     // 1. 二进制数据类型   ( 写longblob)
 78     public void testSaveText() {
 79         String sql = "insert into test(img) values(?)";
 80         try {
 81             // 连接
 82             con = JdbcUtil.getConnection();
 83             // pstmt 对象
 84             pstmt = con.prepareStatement(sql);
 85             // 获取图片流
 86             InputStream in = App_text.class.getResourceAsStream("7.jpg");
 87             pstmt.setBinaryStream(1, in);
 88             
 89             // 执行保存图片
 90             pstmt.execute();
 91             
 92             // 关闭
 93             in.close();
 94             
 95         } catch (Exception e) {
 96             e.printStackTrace();
 97         } finally {
 98             JdbcUtil.closeAll(con, pstmt, null);
 99         }
100     }
101     
102     @Test
103     // 2. 读取大文本数据类型   ( 读longblob)
104     public void testGetAsText() {
105         String sql = "select img from  test where id=2;";
106         try {
107             // 连接
108             con = JdbcUtil.getConnection();
109             // pstmt 对象
110             pstmt = con.prepareStatement(sql);
111             // 读取
112             rs = pstmt.executeQuery();
113             if (rs.next()) {
114                 // 获取图片流
115                 InputStream in = rs.getBinaryStream("img");
116                 // 图片输出流
117                 FileOutputStream out = new FileOutputStream(new File("c://1.jpg"));
118                 int len = -1;
119                 byte b[] = new byte[1024];
120                 while ((len = in.read(b)) != -1) {
121                     out.write(b, 0, len);
122                 }
123                 // 关闭
124                 out.close();
125                 in.close();
126             }
127             
128         } catch (Exception e) {
129             e.printStackTrace();
130         } finally {
131             JdbcUtil.closeAll(con, pstmt, null);
132         }
133     }
134 }

 

以上是关于jdbc java数据库连接 11)中大文本类型的处理的主要内容,如果未能解决你的问题,请参考以下文章

JDBC连接数据以及操作数据

java通过各种类型驱动连接数据库

11--Java--JDBC知识梳理

Java使用JDBC连接随意类型数据库(mysql oracle。。)

day11-JDBC

Java JDBC 对要求仅从特定行返回详细信息的 SQL 查询抛出错误