java clob 操作_10.4(java学习笔记)CLOB,BLOB基本操作

本文介绍了Java如何使用PreparedStatement处理CLOB和BLOB对象,包括在MySQL中存储和读取大量文本与二进制数据。通过setClob和setBlob方法写入数据,利用getCharacterStream和getBinaryStream读取内容,实现了数据的流式操作。
摘要由CSDN通过智能技术生成

一、CLOB

1.1CLOB简介

CLOB全称是(Character Large Object)字符大对象,用于存储大量的文本数据。

字符大对象的操作不同于一般数据,是通过流来完成的。

1.2MySQL中相关类型

-tinytext:最大255个字节(2^8-1)。

-text:最大65535个字节(2^16-1)。

-mediumtext:最大16777215 个字节(2^24-1)。

-longtext:最大4294967295个字节(2^32-1)。

1.3CLOB对象的写入与读取

void java.sql.PreparedStatement.setClob(int parameterIndex, Reader reader);

设置CLOB在数据库中对应列标位置及输入流,即将reader流所代表的文件(或信息)写入到数据库第parameterIndex列。

Reader java.sql.Clob.getCharacterStream();//获取CLOB对象的字符流

文本内容:

fee2870af1c03352982bacdfa02fac27.png               

96b43e4a01689956e1761743ebc910fe.png

建表语句:

CREATE TABLE`test_clob` (

`id`int(11) NOT NULL,

`name`varchar(20) DEFAULT NULL,

`clob`text,PRIMARY KEY(`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;importjava.io.Reader;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;public classTestJDBC{public static void main(String[] args) throwsFileNotFoundException{final String connectionUrl = "jdbc:mysql://localhost:3306/mybatis";

String userName= "root";

String passWord= "123456";

Connection conn= null;

PreparedStatement ps= null;try{

Class.forName("com.mysql.cj.jdbc.Driver");

conn=DriverManager.getConnection(connectionUrl,userName,passWord);

conn.setAutoCommit(false);

ps= conn.prepareStatement("INSERT INTO `mybatis`.`test_clob`"

+ "(`id`,`name`, `clob`) "

+ "VALUES (?, ?, ?);");

ps.setObject(1, 1);

ps.setObject(2, "1");

//clob通过流的形式进行写入       //也可以通过这种方法将指定字符放入数据库

//ps.setClob(3, new BufferedReader(new InputStreamReader(new ByteArrayInputStream("testClob".getBytes()))));

ps.setClob(3, new FileReader(new File("F:\\TestJava\\testClob.txt")));

ps.execute();

ps= conn.prepareStatement("select * from test_clob where id = ?");

ps.setObject(1, 1);

ResultSet rs=ps.executeQuery();

conn.commit();while(rs.next()){//获取clob的字符流

Reader re= rs.getClob("clob").getCharacterStream();int intToChar = -1;//将返回内容依次读取while((intToChar = re.read()) != -1){

System.out.print((char)intToChar);

}

}

System.out.println("select 成功");

}catch(ClassNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(SQLException e) {try{

conn.rollback();

}catch(SQLException e1) {//TODO Auto-generated catch block

e1.printStackTrace();

}//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

运行结果:

testClob.txt

testClob.txt

testClob.txt

testClob.txt

testClob.txtselect 成功

3a8462de0a7c767cd0d00c16396dfeac.png

CLOB通过流方法将数据添加到数据库,从数据库中获取CLOB也是通过流的方式读取内容。

二、BLOB

1.1BLOB简介

BLOB全称是( Large Object)字符大对象,用于存储大量的数据(如图片、视频等)。

字符大对象的操作不同于一般数据,是通过流来完成的。

1.2MySQL中相关类型

-tinyblob:最大255个字节(2^8-1)。

-blob:最大65535个字节(2^16-1)。

-mediumtblob:最大16777215 个字节(2^24-1)。

-longblob:最大4294967295个字节(2^32-1)。

2.3BLOB对象的写入与读取

方法和上述CLOB使用方法基本相同。

void java.sql.PreparedStatement.setBlob(int parameterIndex, InputStream inputStream) ;

//设置放入数据库BLOB对象的输入流,及列标。

InputStream java.sql.Blob.getBinaryStream()

//获取数据库BLOB对象的输入流

(表字段及类型)

2165ee4497a237f557e21042126d9ac0.png

建表语句:

CREATE TABLE`test_blob` (

`id`int(11) NOT NULL,

`name`varchar(50) DEFAULT NULL,

`blob` mediumblob,PRIMARY KEY(`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.text.DateFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;public classTestJDBC{public static void main(String[] args) throwsFileNotFoundException{final String connectionUrl = "jdbc:mysql://localhost:3306/mybatis";

String userName= "root";

String passWord= "123456";

Connection conn= null;

PreparedStatement ps= null;

OutputStream os= null;try{

Class.forName("com.mysql.cj.jdbc.Driver");

conn=DriverManager.getConnection(connectionUrl,userName,passWord);

conn.setAutoCommit(false);

ps= conn.prepareStatement("INSERT INTO `mybatis`.`test_blob`"

+ "(`id`,`name`, `blob`) "

+ "VALUES (?, ?, ?);");

ps.setObject(1, 1);

ps.setObject(2, "1");

//将该文件以BLOB对象形式放入数据库中

ps.setBlob(3, new FileInputStream("F:/依风/Pictures/下载图片/bg.jpg"));;

ps.execute();

ps= conn.prepareStatement("select * from test_blob where id = ?");

ps.setObject(1, 1);

//获取查询结果

ResultSet rs=ps.executeQuery();

conn.commit();byte[] buff = new byte[1024];int step = -1;

//指定输出流写出位置 F:\Test\Java\test.jpg

os= new FileOutputStream("F:\\TestJava\\test.jpg");while(rs.next()){

//获取数据库中BLOB对象的输入流

InputStream is= rs.getBlob("blob").getBinaryStream();

//读入BLOB对象内容,并将其写入指定位置while((step = is.read(buff)) != -1){

os.write(buff,0, step);

}

is.close();

os.close();

}

System.out.println("成功");

}catch(ClassNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(SQLException e) {try{

conn.rollback();

}catch(SQLException e1) {//TODO Auto-generated catch block

e1.printStackTrace();

}//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}

}

运行结果:select 成功

907d1e92d334353813a9b95b52e5444a.png

90cf12ab7f515b929156882febf7ac8e.png

上述代码先将图片放入数据库中,然后从数据库中获取到对应的BLOB对象,

最后获取BLOB的输入流,并将其写入到指定文件夹,可以看到数据库(以图片方式查看)和指定文件夹中都有图片。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值