Mysql通过JDBC处理大文本TEXT及二进制文件BLOB类型数据

**

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();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值