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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。