Java 操作MySQL資料庫存取圖片以及其它類型檔案,mysql其它類型

來源:互聯網
上載者:User

Java 操作MySQL資料庫存取圖片以及其它類型檔案,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 dealingPreparedStatement 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 dealingPreparedStatement 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();}}}


相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.