MySQL存储文本和图片的方法
Oracle中大文本数据类型
Clob长文本类型(MySQL中不支持,使用的是text) Blob二进制类型
MySQL数据库
Text长文本类型 TINYTEXT:256bytes TEXT:65,535bytes=>~64kb MEDIUMTEXT:16,777,215bytes=>~16MB LONGTEXT:4,294,967,295bytes=>~4GB Blob二进制类型
例如:
建表
CREATETABLEtest( idINTPRIMARYKEYAUTO_INCREMENT, contentLONGTEXT,--文本字段 imgLONGBLOB--图片字段 );
存储文本时是以字符类型存储,存储图片时是以二进制类型存储,具体使用的设置参数方法,和获取数据方法不同。
例如:
//存储文本时
//存储时,设置参数为字符流FileReaderreader
pstmt.setCharacterStream(1,reader);
//获取参数时
//方式1:
Readerr=rs.getCharacterStream("content");
//获取长文本数据,方式2:
System.out.print(rs.getString("content"));
//存储二进制图片时
//设置参数为2进制流InputStreamin
pstmt.setBinaryStream(1,in);
//获取2进制流
InputStreamin=rs.getAsciiStream("img");
/**
*保存照片
*
*/
@Test
publicvoidtest2(){
Stringsql="insertintotest(img)values(?)";
try{
con=JDBCUtil.getConnection();
pstmt=con.prepareStatement(sql);
//设置参数
//获取文本
Filefile=newFile("f:/a.jpg");
InputStreamin=newFileInputStream(file);
//设置参数为2进制流
pstmt.setBinaryStream(1,in);
//执行sql
pstmt.executeUpdate();
in.close();
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
JDBCUtil.close(con,pstmt);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
/**
*获取照片
*
*/
@Test
publicvoidtest3(){
Stringsql="select*fromtestwhereid=?;";
try{
con=JDBCUtil.getConnection();
pstmt=con.prepareStatement(sql);
//设置参数
pstmt.setInt(1,2);
//执行查询
rs=pstmt.executeQuery();
while(rs.next()){
byte[]buff=newbyte[1024];
InputStreamin=rs.getAsciiStream("img");
intl=0;
OutputStreamout=newFileOutputStream(newFile("f:/1.jpg"));
while((l=in.read(buff))!=-1){
out.write(buff,0,l);
}
in.close();
out.close();
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
JDBCUtil.close(con,pstmt);
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。