3

Java知识点总结(JDBC-大文本对象的使用)

@(Java知识点总结)[Java, JDBC]

CLOB(Chaaracter Large Object)

  • 用于存储大量的文本数据
  • 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理。而非一般的字段,一次即可读出数据。

Mysql中相关类型:

  • TINYTEXT最大长度为255(2^8-1)字符的TEXT列。
  • TEXT最大长度为65535(2^16-1)字符的TEXT列。
  • MEDIUMTEXT最大长度为16777215(2^24-1)字符的TEXT列。
  • LONGTEXT最大长度为4294967295或4GB(2^32-1)字符的TEXT列。

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.sql.Clob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * 测试CLOB 文本大对象的使用
 * 将字符串和文本内容插入到数据库中的CLOB字段,讲CLOB字段取出来的操作
 * @author Administrator
 *
 */
public class Demo02 {
  //存
  private static void insert(Connection conn){
    String sql = "insert into users(NAME,INFO) values(?,?)";
    PreparedStatement ps = null;
    try {
     ps = conn.prepareStatement(sql);
     ps.setString(1, "黄晓明");
     //将文本内容直接输入到数据库
     //ps.setClob(2, new FileReader(new File("E:/b.txt")));
     //讲程序中的字符串输入到数据库的CLOB字段中
     ps.setClob(2, new BufferedReader(
         new InputStreamReader(new ByteArrayInputStream("黄晓明是个明星".getBytes("utf-8")))));
     
     ps.execute();
    
    } catch (SQLException | UnsupportedEncodingException e) {
     e.printStackTrace();
    }finally{
     DBUtil. close(ps);
     DBUtil. close(conn);
    }
  }
  
  //读
  private static void read(Connection conn){
    String sql = "select * from users where USERID = ?";
    PreparedStatement ps = null;
    ResultSet rs = null;
    try {
     ps = conn.prepareStatement(sql);
     ps.setObject(1, 10); //setObject()可以代替setInt()、setString()等
     rs = ps.executeQuery();
     while(rs.next()){
       Clob clob = rs.getClob("INFO");
       Reader r= clob.getCharacterStream(); //通过字符流的方式读取
       int temp = 0;
       while((temp = r.read())!=-1){
         System.out.print((char)temp);
         
       }
     }
    } catch (SQLException | IOException e) {
     e.printStackTrace();
    }finally{
       DBUtil.close(rs);
      DBUtil.close(ps);
      DBUtil.close(conn);
   }
  }
  
  public static void main(String[] args) {
    insert(DBUtil.getConn());
    read(DBUtil.getConn());
  }
}

苏生
803 声望725 粉丝