1. 程式人生 > >JDBC對於 clob 與 blob 的存取

JDBC對於 clob 與 blob 的存取

首先在資料庫中建立有clob和blob資料型別的表

  create table my(
  id number priamry key,
  data clob
  );

  create table you(
  id number priamry key,
  data blob
  );

java中對於clob與blob的存取

package com.briup.jdbc;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import
java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.sql.Blob; import java.sql.Clob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import
java.sql.SQLException; public class CLobBlobTest { private String driver="oracle.jdbc.driver.OracleDriver"; private String url="jdbc:oracle:thin:@192.168.43.216:1521:XE"; private String user="jd1812"; private String password="briup"; public static void main(String[] args) { // new CLobBlobTest().insertClob();
// new CLobBlobTest().readClob(); // new CLobBlobTest().insertBlob(); new CLobBlobTest().readBlob(); } //1.從資料庫讀取blob型別資料 public void readBlob(){ Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; try { Class.forName(driver); conn=DriverManager.getConnection(url, user, password); String sql="select id,data from you"; ps=conn.prepareStatement(sql); rs=ps.executeQuery(); while(rs.next()){ int id=rs.getInt(1); // Blob blob=rs.getBlob(2); // InputStream is=blob.getBinaryStream(); //獲取blob欄位的值 InputStream is=rs.getBinaryStream(2); BufferedReader br= new BufferedReader(new InputStreamReader(is)); String str=null; while((str=br.readLine())!=null){ System.out.println(str); } } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(ps!=null)ps.close(); if(conn!=null)conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //2.向資料庫寫入blob型別資料 public void insertBlob(){ Connection conn=null; PreparedStatement ps=null; try { Class.forName(driver); conn=DriverManager.getConnection(url, user, password); String sql="insert into you values(?,?)"; ps=conn.prepareStatement(sql); ps.setInt(1, 1); File file=new File("src/jd1812_jdbc.txt"); ps.setBlob(2, new FileInputStream(file)); ps.execute(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(ps!=null)ps.close(); if(conn!=null)conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //從資料庫讀取Clob型別資料 public void readClob(){ Connection conn=null; PreparedStatement ps=null; ResultSet rs=null; try { Class.forName(driver); conn=DriverManager.getConnection(url, user, password); String sql="select id,data from my"; ps=conn.prepareStatement(sql); rs=ps.executeQuery(); while(rs.next()){ int id=rs.getInt("id"); //可以用,有可能取不到值 //Reader reader=rs.getCharacterStream("data"); Clob clob=rs.getClob("data"); Reader reader=clob.getCharacterStream(); BufferedReader br= new BufferedReader(reader); String str=null; while((str=br.readLine())!=null){ System.out.println(str); } } } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(ps!=null)ps.close(); if(conn!=null)conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } //4.向資料庫寫入clob型別資料 public void insertClob(){ Connection conn=null; PreparedStatement ps=null; try { Class.forName(driver); conn=DriverManager.getConnection(url, user, password); String sql="insert into my values(?,?)"; ps=conn.prepareStatement(sql); ps.setInt(1, 3); //如果內容全是字母和數字Ascii //第二個引數是位元組流 //文字路徑 // File file=new File("src/com/briup/jdbc/jdbc.txt"); File file=new File("src/jd1812_jdbc.txt"); //ps.setAsciiStream(2, new FileInputStream(file)); // ps.setAsciiStream(2, new FileInputStream(file),file.length()); //如果內容有中文等字元 ps.setCharacterStream(2, new FileReader(file)); ps.execute(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { if(ps!=null)ps.close(); if(conn!=null)conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }