jdbc基础 (三) 大文本、二进制数据处理
时间:2022-05-08
本文章向大家介绍jdbc基础 (三) 大文本、二进制数据处理,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
LOB (Large Objects) 分为:CLOB和BLOB,即大文本和大二进制数据
CLOB:用于存储大文本
BLOB:用于存储二进制数据,例如图像、声音、二进制文件
在mysql中,只有BLOB,没有CLOB,mysql存储大文本用TEXT
TEXT 分为:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT
BLOB 分为:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
取值范围如下图:
下面来看具体的代码实现:
1 package com.cream.ice.jdbc;
2
3 import java.io.File;
4 import java.io.FileNotFoundException;
5 import java.io.FileReader;
6 import java.io.FileWriter;
7 import java.io.Reader;
8 import java.io.Writer;
9 import java.sql.Connection;
10 import java.sql.PreparedStatement;
11 import java.sql.ResultSet;
12 import java.sql.SQLException;
13
14 import org.junit.Test;
15
16 /**
17 * 大文本数据操作
18 *
19 * 假设数据库中已存在表test:
20 * create table test(
21 * id int primary key,
22 * content longtext
23 * );
24 *
25 * @author ice
26 *
27 */
28 public class ClobDemo {
29
30 Connection connection = null;
31 PreparedStatement statement = null;
32 ResultSet resultSet=null;
33
34 @Test
35 public void add(){
36 try {
37 connection=JdbcUtils.getConnection();
38 statement=connection.prepareStatement("insert into test (id,content) values (?,?)");
39 statement.setInt(1, 1);
40
41 //大文本要使用流的形式。将d:/test.txt内容添加至该记录的content字段
42 File file = new File("d:/test.txt");
43 Reader reader = new FileReader(file);
44 //不能使用long的参数,因为mysql根本支持不到那么大的数据,所以没有实现
45 statement.setCharacterStream(2, reader, (int)file.length());
46
47 int i = statement.executeUpdate();
48 if(i>0)
49 System.out.println("插入成功");
50
51 } catch (SQLException e) {
52 e.printStackTrace();
53 } catch (FileNotFoundException e) {
54 e.printStackTrace();
55 } finally{
56 JdbcUtils.releaseResources(null, statement, connection);
57 }
58 }
59
60 @Test
61 public void read(){
62 try {
63 connection = JdbcUtils.getConnection();
64 statement = connection.prepareStatement("select * from test where id=?");
65 statement.setInt(1, 1);
66
67 //将读取内容保存到E盘上
68 resultSet = statement.executeQuery();
69 while(resultSet.next()){
70 Reader reader = resultSet.getCharacterStream("content");
71 Writer writer = new FileWriter("e:/test.txt");
72 char buffer[] = new char[1024];
73 int len = -1;
74 while((len=reader.read(buffer))!=-1){
75 writer.write(buffer, 0, len);
76 }
77 reader.close();
78 writer.close();
79 }
80 } catch (Exception e) {
81 e.printStackTrace();
82 } finally{
83 JdbcUtils.releaseResources(resultSet, statement, connection);
84 }
85 }
86 }
1 package com.cream.ice.jdbc;
2
3 import java.io.FileInputStream;
4 import java.io.FileOutputStream;
5 import java.io.InputStream;
6 import java.io.OutputStream;
7 import java.sql.Connection;
8 import java.sql.PreparedStatement;
9 import java.sql.ResultSet;
10
11 import org.junit.Test;
12
13 /**
14 * 大二进制数据操作
15 *
16 * 假设数据库中已存在表test:
17 * create table test(
18 * id int primary key,
19 * content longblob
20 * );
21 *
22 * @author ice
23 *
24 */
25 public class BlobDemo {
26 Connection connection = null;
27 PreparedStatement statement = null;
28 ResultSet resultSet=null;
29
30 @Test
31 public void add(){
32 try {
33 connection=JdbcUtils.getConnection();
34 statement=connection.prepareStatement("insert into test (id,content) values (?,?)");
35 statement.setInt(1, 1);
36
37 InputStream in = new FileInputStream("d:/test.jpg");
38 statement.setBinaryStream(2, in, in.available());
39
40 int i = statement.executeUpdate();
41 if(i>0)
42 System.out.println("插入成功");
43
44 } catch (Exception e) {
45 e.printStackTrace();
46 } finally{
47 JdbcUtils.releaseResources(null, statement, connection);
48 }
49 }
50
51 @Test
52 public void read(){
53 try {
54 connection = JdbcUtils.getConnection();
55 statement = connection.prepareStatement("select * from test where id=?");
56 statement.setInt(1, 1);
57
58 //保存到E盘上
59 resultSet = statement.executeQuery();
60 while(resultSet.next()){
61 InputStream in = resultSet.getBinaryStream("content");
62 OutputStream out = new FileOutputStream("e:/test.jpg");
63 byte b[] = new byte[1024];
64 int len = -1;
65 while((len=in.read(b))!=-1){
66 out.write(b, 0, len);
67 }
68 out.close();
69 in.close();
70 }
71 } catch (Exception e) {
72 e.printStackTrace();
73 } finally{
74 JdbcUtils.releaseResources(resultSet, statement, connection);
75 }
76 }
77 }
这里使用了我上一篇jdbc基础中的JdbcUtils工具类,同时也使用了单元测试来测试两个成员方法,代码已亲测可运行。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux操作系统利用python实现任务管理器可视化功能
- Linux下安装PHP curl扩展的方法详解
- 各种OOM代码样例及解决方法
- Linux 中不输入密码运行 sudo 命令的方法
- Linux 查看远程服务器文件状态的方法
- 安装ubuntu时黑屏的解决办法(3种)
- linux输入yum后提示: -bash: /usr/bin/yum: No such file or directory的解决方法
- 分布式锁,三种实现方式,性能对比分析!
- Linux 中锁定和解锁用户帐户的三种方法
- centos8 安装 nginx的详细教程(图文)
- Ubuntu系统日志配置 /var/log/messages的方法
- 在Ubuntu 14 上安装 Nginx-RTMP 流媒体服务器的教程
- centos8自定义目录安装nginx(教程详解)
- VMware下Centos7桥接方式网络配置步骤详解
- Linux CentOS 6.5 卸载、tar安装MySQL的教程