首頁 > 資料庫 > mysql教程 > Java操作MySQL数据库存取图片以及其它类型文件_MySQL

Java操作MySQL数据库存取图片以及其它类型文件_MySQL

WBOY
發布: 2016-06-01 13:04:33
原創
1256 人瀏覽過

一、需要注意的一个问题

1、当数据库字段为blob类型时,必须使用PreparedStatement中的setBinaryStream(int,InputStream,int)方法;
2、当数据库字段为longblob类型时,必须使用PreparedStatement中的setBinaryStream(int,InputStream,long)方法。

否则就会抛出如题的错误:
Exception in thread "main" java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.setCharacterStream(ILjava/io/Reader;)V is abstract
at com.mysql.jdbc.PreparedStatement.setCharacterStream(PreparedStatement.java)
at GetConnection.main(GetConnection.java:19)
当应用程序试图调用一个抽象方法时,抛出此错误。通常由编译器捕获此错误;如果某个类的定义自当前执行方法最后一次编译以后作了不兼容的更改,则此错误只可能在运行时发生。

二、实际编程操作

1、首先创建数据表

CREATE TABLE stuinfo(id int(11) NOT NULL auto_increment,name varchar(10) default NULL,content longText,image,longBlob,PRIMARY KEY(id))ENGINE=InnoDB;

2、编码存储图片以及文本文件

 

import java.sql.*;
import java.io.*;

public class GetConnection{
	public static void main(String[] args){
		Access2Database adb=new Access2Database();
		Connection conn=adb.getConn();	
		
		//transaction dealing
		PreparedStatement pstam=null;
		String sql="insert into stuinfo(name,content,image) values(?,?,?);";
		try {
			pstam=conn.prepareStatement(sql);
			pstam.setString(1, "cjc");
			
			File file=new File("D:/我的文档/Documents/JavaPrj/Test/src/test.txt");
			InputStream itxt=new FileInputStream(file);
			BufferedReader br=new BufferedReader(new InputStreamReader(itxt));
			pstam.setCharacterStream(2,br,(int)file.length());
			
			File file1=new File("D:/我的文档/Documents/JavaPrj/Test/src/1.jpg");
			InputStream isimg=new FileInputStream(file1);
			pstam.setBinaryStream(3, isimg, (int)file1.length());
			
			pstam.executeUpdate();
			
			br.close();
			itxt.close();
			isimg.close();
			pstam.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e){
			e.printStackTrace();
		} catch (IOException e){
			e.printStackTrace();
		}
	}
}
登入後複製
结果:

 

\

3、编码读取图片以及文本文件

 

代码

 

import java.sql.*;
import java.io.*;

public class GetConnection{
	public static void main(String[] args){
		Access2Database adb=new Access2Database();
		Connection conn=adb.getConn();	
		
		//transaction dealing
		PreparedStatement pstam=null;
		String sql="select * from stuinfo where name=?;";
		try {
			pstam=conn.prepareStatement(sql);
			pstam.setString(1, "cjc");
			ResultSet reset=pstam.executeQuery();
			while(reset.next()){
				System.out.println("Read text document...");
				BufferedReader br=new BufferedReader(reset.getCharacterStream(3));
				String str=null;
				while((str=br.readLine())!=null){
					System.out.println(str);
				}
				System.out.println("Read text document OK!");
				
				System.out.println("Read image file...");
				BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream(new File("result.jpg")));
				byte[] buf=new byte[1024];
				BufferedInputStream bis=new BufferedInputStream(reset.getBinaryStream(4));
				int count=-1;
				while((count=bis.read(buf, 0, 1024))!=-1){
					bos.write(buf, 0, count);
				}
				bos.flush();
				System.out.println("Read image file OK!");
				bos.close();
			}
			reset.close();
			pstam.close();
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (FileNotFoundException e){
			e.printStackTrace();
		} catch (IOException e){
			e.printStackTrace();
		}
	}
}
    
登入後複製
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板