现在的位置: 首页 > 移动开发 > 正文

JDBC怎么读写MySQL的大字段数据

2020年06月08日 移动开发 ⁄ 共 2978字 ⁄ 字号 评论关闭

  不管你是新手还是老手,大字段数据的操作常常令你感到很头痛。因为大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的。而非一般的字段,一次即可读出数据。下面学步园小编来讲解下JDBC怎么读写MySQL的大字段数据?

  JDBC怎么读写MySQL的大字段数据

  环境:

  MySQL5.1

  JDK1.5

  一、认识MySQL的大字段类型

  BLOB是一个二进制大对象,可以容纳可变数量的数据。有4种BLOB类型:TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB.它们只是可容纳值的最大长度不同。

  有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT.这些对应4种BLOB类型,有相同的最大长度和存储需求。

  BLOB列被视为二进制字符串(字节字符串)。TEXT列被视为非二进制字符串(字符字符串)。BLOB列没有字符集,并且排序和比较基于列值字节的数值值。TEXT列有一个字符集,并且根据字符集的校对规则对值进行排序和比较。

  在TEXT或BLOB列的存储或检索过程中,不存在大小写转换。

  当未运行在严格模式时,如果你为BLOB或TEXT列分配一个超过该列类型的最大长度的值值,值被截取以保证适合。

  几种类型的大字段最大长度说明:

  TINYBLOB最大长度为255(2^[8]–1)字节的BLOB列。

  TINYTEXT最大长度为255(2^[8]–1)字符的TEXT列。

  BLOB[(M)]最大长度为65,535(2^[16]–1)字节的BLOB列。可以给出该类型的可选长度M.如果给出,则MySQL将列创建为最小的但足以容纳M字节长的值的BLOB类型。

  TEXT[(M)]最大长度为65,535(2^[16]–1)字符的TEXT列。可以给出可选长度M.则MySQL将列创建为最小的但足以容纳M字符长的值的TEXT类型。

  MEDIUMBLOB最大长度为16,777,215(2^[24]–1)字节的BLOB列。

  MEDIUMTEXT最大长度为16,777,215(2^[24]–1)字符的TEXT列。

  LONGBLOB最大长度为4,294,967,295或4GB(2^[32]–1)字节的BLOB列。LONGBLOB列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。

  LONGTEXT最大长度为4,294,967,295或4GB(2^[32]–1)字符的TEXT列。LONGTEXT列的最大有效(允许的)长度取决于客户端/服务器协议中配置最大包大小和可用的内存。

  二、创建测试环境

  createtableuser(

  idint(11)notnullauto_increment,

  namevarchar(50)notnull,

  pswdvarchar(50)defaultnull,

  piclongblob,

  remarklongtext,

  primarykey(id)

  );

  三、插入读取blob

  importlavasoft.common.DBToolkit;

  importjava.io.*;

  importjava.sql.*;

  /**

  *操作MySQL5的blob字段

  *

  *@authorleizhimin2009-12-311:34:50

  */

  publicclassBlobTest{

  publicstaticvoidmain(String[]args){

  insertBlob();

  queryBlob();

  }

  publicstaticvoidinsertBlob(){

  Connectionconn=DBToolkit.getConnection();

  PreparedStatementps=null;

  try{

  Stringsql=“insertintotestdb.user(name,pswd,pic)values(?,?,?)”;

  ps=conn.prepareStatement(sql);

  ps.setString(1,“zhangsan”);

  ps.setString(2,“111”);

  JDBC怎么读写MySQL的大字段数据

  //设置二进制参数

  Filefile=newFile(“D:\\new\\dbtools\\src\\res\\PIC.PNG”);

  InputStreamin=newBufferedInputStream(newFileInputStream(file));

  ps.setBinaryStream(3,in,(int)file.length());

  ps.executeUpdate();

  in.close();

  }catch(IOExceptione){

  e.printStackTrace();

  }catch(SQLExceptione){

  e.printStackTrace();

  }finally{

  DBToolkit.closeConnection(conn);

  }

  }

  publicstaticvoidqueryBlob(){

  Connectionconn=DBToolkit.getConnection();

  PreparedStatementps=null;

  Statementstmt=null;

  ResultSetrs=null;

  try{

  Stringsql=“selectpicfromuserwhereid=24”;

  stmt=conn.createStatement();

  rs=stmt.executeQuery(sql);

  if(rs.next()){

  InputStreamin=rs.getBinaryStream(1);

  Filefile=newFile(“D:\\new\\dbtools\\src\\res\\PIC_COPY.PNG”);

  OutputStreamout=newBufferedOutputStream(newFileOutputStream(file));

  byte[]buff=newbyte[1024];

  for(inti=0;(i=in.read(buff))>0;){

  out.write(buff,0,i);

  }

  out.flush();

  out.close();

  in.close();

  }

  rs.close();

  stmt.close();

  }catch(IOExceptione){

  e.printStackTrace();

  }catch(SQLExceptione){

  e.printStackTrace();

  }finally{

  DBToolkit.closeConnection(conn);

  }

  }

  }

  注意,要确保二进制数据长度足够大,否则可能导致数据写入不完整的问题。

  以上就是关于“JDBC怎么读写MySQL的大字段数据”的内容,希望对大家有用。更多资讯请关注学步园。学步园,您学习IT技术的优质平台!

抱歉!评论已关闭.