2019独角兽企业重金招聘Python工程师标准>>>
将图片存储到数据库中(Blob)
public void BlogIn(){
Connection con=getConnection();
System.out.println(con);
//插入数据库的语句
String sql="insert into user(name,message) values(?,?)";
try {
PreparedStatement pstmt= con.prepareStatement(sql);
pstmt.setString(1, "ligen");
//读取图片等二进制的文件,使用InputStream输入流
InputStream in=new FileInputStream("G:\\111.jpg");
/* mysql实现了所有方法,但有些方法执行无法通过,没有真正的实现
pstmt.setBlob(2, in);
pstmt.setBinaryStream(2, in);
*/
pstmt.setBinaryStream(2, in, in.available());
pstmt.executeUpdate();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
2.将图片从数据库中读出来(Blob)
public void BlogOut(){
Connection con=getConnection();
System.out.println(con);
//读取数据库中的语句
String sql="select * from user where id=3";
try {
Statement sta= con.createStatement();
ResultSet rs= sta.executeQuery(sql);
if(rs.next()){
//通过resultset来获取Blob类型的数据
Blob blog=rs.getBlob("message");
//从数据库中获取此对象并将其转化为输入流对象,以此从数据库中取出
InputStream in= blog.getBinaryStream();
String path="G:\\222.jpg";
OutputStream os=new FileOutputStream(path);
//为字节流设置缓冲区
byte[] b=new byte[1024];
int length=0;
while((length=in.read(b))!=-1){
3.将大文本类型存入数据库中(Text)
public void TextIn(){
Connection con=getConnection();
String sql="insert into user(name,lword) values(?,?)";
try {
PreparedStatement ps= con.prepareStatement(sql);
ps.setString(1, "text2");
String path="G:\\111.txt";
InputStream in=new FileInputStream(path);
/*
ps.setBinaryStream(2, in, in.available());
*/
//设置连接数据库的流,参数中给的是Reader类型,因此必须新建Reader类的子类
//Reader reader=new InputStreamReader(in, "utf-8");
//ps.setCharacterStream(2, reader,in.available());
//也可以存入数据库,但是乱码,因此存入之前必须设置编码格式
//文本文档之类的采用字符流
Reader reader=new InputStreamReader(in, "utf8");
ps.setCharacterStream(2, reader, in.available());
ps.executeUpdate();
4.将大型文件从数据库中读取出来(Text)
public void TextOut(){
Connection con=getConnection();
String sql="select * from user where id=5";
try {
PreparedStatement ps= con.prepareStatement(sql);
//ps.setBinaryStream(parameterIndex, x, length)
ResultSet rs= ps.executeQuery(sql);
if(rs.next()){
Reader reader= rs.getCharacterStream("lword");
BufferedReader buffer=new BufferedReader(reader);
/*
Writer writer=new OutputStreamWriter(os, "utf-8");
char[] buffer=new char[1024];
int len=0;
while((len=reader.read(buffer))!=0){
}
*/
OutputStream os=new FileOutputStream("G:\\222.txt");
5.Blob与Text
1>MySQL中,BLOB是一个二进制大型对象,是一个可以存储大量数据的容器,它能容纳不同大小的数据。BLOB类型实际是个类型系列(TinyBlob、Blob、MediumBlob和LongBlob),除了在存储的最大信息量上不同外,他们是等同的。
2>MySQL的四种BLOB类型
3>实际使用中根据需要存入的数据大小定义不同的BLOB类型。需要注意的是:如果你存储的文件过大,数据库的性能会下降很多。
4>有4种TEXT类型:TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT。这些对应4种BLOB类型,有相同的最大长度和存储需求