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();
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值