1. 程式人生 > >用JDBC處理二進制類文件

用JDBC處理二進制類文件

gen ive cal del logs n) rtm pub on()

數據庫中可以存儲整數、小數、字符,也可以存儲音樂視頻等文件,這時候我們可以用二進制的方式。

四種不同大小的二進制類型,單位為字節

TinyBlob 255B

Blob 65k

MediumBlob 16M

LongBlob 4G

package jdbc_preparement;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Statement; public class text_preparestartment { public static void main(String[] args) {
// TODO Auto-generated method stub Connection con=simplecon.getConnection(); String sql="insert into t_user values(null,?,?,null);"; String sql1="insert into t_hobby values(?,?)"; try { PreparedStatement ps=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS); ps.setString(
1, "mike"); //插入一組數據 ps.setString(2, "4399"); ps.execute(); ResultSet re=ps.getGeneratedKeys(); //獲得主鍵 re.next(); int n=re.getInt(1); System.out.println("自然增長的序號為"+n); simplecon.close(re); simplecon.close(ps); PreparedStatement ps1=con.prepareStatement(sql1); ps1.setInt(1, n); Blob pic=con.createBlob(); //創建一個二進制類型 OutputStream out=pic.setBinaryStream(1); //返回一個流,流向這個二進制存放處,並設置位置為初始位置1 //讀入一個二進制文件 byte[] b; String picname="d:/tupian.jpg"; b=simple_read.readpic(picname); //自定義的讀入圖片的類 out.write(b);//將圖片的二進制寫到Blob中 out.flush(); out.close(); ps1.setBlob(2,pic);//將blob寫到數據庫中 ps1.execute(); simplecon.close(ps1); simplecon.close(con); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
//連接數據庫
class simplecon { static Connection con; static Connection getConnection() { try{ con=DriverManager.getConnection("jdbc:mysql://localhost:3306/test","數據庫名","數據庫密碼"); }catch(SQLException e){ e.printStackTrace(); } return con; } static void close(AutoCloseable a) { try { a.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
//從文件中讀取圖片
class simple_read { static byte[] readpic(String a) { byte[] b=null; try { FileInputStream in=new FileInputStream(a); b=new byte[in.available()]; in.read(b); in.close(); System.out.println("ok!"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return b; } }

用JDBC處理二進制類文件