不管你是新手还是老手,大字段数据的操作常常令你感到很头痛。因为大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的。而非一般的字段,一次即可读出数据。下面学步园小编来讲解下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技术的优质平台!