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)
當應用程序試圖調用一個抽象方法時,拋出此錯誤。通常由編譯器捕獲此錯誤;如果某個類的定義自當前執行方法最後一次編譯以後作了不兼容的更改,則此錯誤只可能在運行時發生。
CREATE TABLE stuinfo(id int(11) NOT NULL auto_increment,name varchar(10) default NULL,content longText,image,longBlob,PRIMARY KEY(id))ENGINE=InnoDB;
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(); } } }結果:
代碼
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(); } } }