程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Java操作MySQL數據庫存取圖片以及其它類型文件

Java操作MySQL數據庫存取圖片以及其它類型文件

編輯:MySQL綜合教程

Java操作MySQL數據庫存取圖片以及其它類型文件


一、需要注意的一個問題

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();
		}
	}
}

						

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved