**
Mysql通过jdbc处理TEXT(CLOB)/BLOB类型
**
处理稍大型数据:
a.存储路径 E:\JDK_API_zh_CN.CHM
通过JDBC存储文件路径,然后 根据IO操作处理
例如:JDBC将 E:\JDK_API_zh_CN.CHM 文件 以字符串形式“E:\JDK_API_zh_CN.CHM”存储到数据库中
获取:1.获取该路径“E:\JDK_API_zh_CN.CHM” 2.IO
b.
TEXT(CLOB):大文本数据 (小说->数据)
BLOB:二进制
clob:大文本数据 字符流 Reader Writer
存
1.先通过pstmt 的? 代替小说内容 (占位符)
2.再通过pstmt.setCharacterStream(2, reader, (int)file.length()); 将上一步的?替换为 小说流, 注意第三个参数需要是 Int类型
取:
1.通过Reader reader = rs.getCharacterStream(“NOVEL”) ; 将cloc类型的数据 保存到Reader对象中
2. 将Reader通过Writer输出即可。
blob:二进制 字节流 InputStream OutputStream
与TEXT(CLOB)步骤基本一致,区别:setBinaryStream(…) getBinaryStream(…)
先创建表mysql为create table mynovel (id numeric primary key,novel text)
orcal为create table mynovel (id number primary key,novel clob)
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.Writer;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Scanner;
public class JDBCText{
private static final String URL = "jdbc:mysql://localhost:3306/test";
private static final String USERNAME = "root";
private static final String PWD = "2020";
//通过jdbc存储大文本数据(小说)
public static void textDemo() {
Connection connection = null;
PreparedStatement pstmt = null;
try {
// a.导入驱动,加载具体的驱动类
Class.forName("com.mysql.jdbc.Driver");// 加载具体的驱动类
// b.与数据库建立连接
connection = DriverManager.getConnection(URL, USERNAME, PWD);
String sql="insert into mynovel values(?,?)";
// c.发送sql,执行(增删改、查)
pstmt = connection.prepareStatement(sql);
pstmt.setInt(1,1);
File file=new File("E:\\all.txt");
InputStream in =new FileInputStream(file);
Reader reader =new InputStreamReader( in,"GBK");//转换流 可以设置编码
pstmt.setCharacterStream(2, reader,(int)file.length());
int count=pstmt.executeUpdate();
// d.处理结果
if (count > 0) {
System.out.println("操作成功!");
}
reader.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
finally {
try {
if(pstmt!=null) pstmt.close();// 对象.方法
if(connection!=null)connection.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
//通过jdbc读取大文本数据(小说)
public static void textReaderDemo() {
Connection connection = null;
PreparedStatement pstmt = null;
ResultSet rs =null;
try {
// a.导入驱动,加载具体的驱动类
Class.forName("com.mysql.jdbc.Driver");// 加载具体的驱动类
// b.与数据库建立连接
connection = DriverManager.getConnection(URL, USERNAME, PWD);
String sql="select NOVEL from mynovel where id=?";
// c.发送sql,执行(增删改、查)
pstmt = connection.prepareStatement(sql);
pstmt.setInt(1,1);
rs =pstmt.executeQuery();
//setxxx getxxx setint getint
if(rs.next())
{
//reader将小说存储到内存中,通过writer方法将内存中的小说存储到硬盘(该过程中
// 要将数据读取到缓冲区中,再从缓冲区中获取数据,即放进项目中去
Reader reader = rs.getCharacterStream("NOVEL");
//IO流输出
Writer writer = new FileWriter("src/小说.txt");
char[] chs=new char[100];
int len=-1;
while( (len = reader.read(chs))!=-1){
writer.write(chs,0,len );
}
writer.close();
reader.close();
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
finally {
try {
if(pstmt!=null) pstmt.close();// 对象.方法
if(connection!=null)connection.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
//textDemo();
textReaderDemo();
}
}