乐鱼电竞

  • 教育行业A股IPO第一股(股票代码 003032)

    全国咨询/投诉热线:400-618-4000

    JDBC处理CLOB数据和BLOB数据

    更新时间:2023年09月22日15时11分 来源:乐鱼电竞 浏览次数:

    好口碑IT培训

    大数据处理主要指的是对CLOB和BLOB类型数据的操作。在应用程序中,要想操作这两种数据类型,必须使用PreparedStatement完成,并且所有的操作都要以IO流的形式进行存放和读取。下面将针对CLOB数据和BLOB数据的处理方式进行详细的介绍。

    1. 处理CLOB数据

    在实际开发中,CLOB用于存储大文本数据,但是,对MySQL而言,大文本数据的存储是用TEXT类型表示的。为了帮助读者更好地学习JDBC中CLOB数据的处理方式,下面通过一个案例来演示,具体步骤如下。

    (1)首先在数据库chapter01中,创建一个数据表testclob,创建表的SQL语句如下所示。

    create table testclob(
    	id int primary key auto_increment,
    	resume text
    );


    (2) 在工程chapter01中,新建一个类CLOBDemo01,该类实现了向数据库写入大文本数据的功能,CLOBDemo01的具体实现方式如例下所示。

    CLOBDemo01.java

    package cn.itcast.jdbc.example;
    import java.io.*;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import cn.itcast.jdbc.example.utils.JDBCUtils;
    public class CLOBDemo01{
        public static void main (string[] args)(
            Connection conn= null;
            PreparedStatement preStmt= nul1;
            try{
                conn=JDBCUtils.getConnection();
                String sql = "insert into testclob values(?,?)";
                preStmt=conn.prepareStatement(sql);
                File file = new File("D:\itcast.txt");
                Reader reader=new InputStreamReader(
                    new FileInputstream(file),"utf-8");
                prestmt.setInt (1,1);
                preStmt.setCharacterStream(2, reader, (int) file.length());
                prestmt.executeUpdate();
            }catch (Exception e){
                e.printStackTrace();
            }finally{
                //释放资源
                JDBCUtils.release(null, preStmt, conn);
            }
        }
    }

    在上面案例中,由于文本数据保存在文件中,因此使用FileInputStream读取文件中的数据,然后通过PreparedStatement对象将数据写入到表testclob的resume字段中。

    (3) 在工程chapter01中,新建一个类CLOBDemo02,,类用于读取表testclob中的数据,CLOBDemo2的具体实现方式如下所示。

    package cn.itcast.jdbc.example;
    import java.io.*;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import cn.itcast.jdbc.example.utils.JDBCUtils;
    public class CLOBDemo02{
        public static void main(String[] args){
            Connection conn=null;
            PreparedStatement preStmt=null;
            ResultSet rs=null;
            try{
                conn = JDBCUtils.getConnection();
                String sql = "select * from testclob";
                preStmt = conn.prepareStatement(sql);
                rs = preStmt.executeQuery();
                if (rs.next()){
                    Reader reader = rs.getCharacterStream("resume");
                    Writer out = new FileWriter("resume.txt");
                    int temp;
                    while((temp=reader.read()) !=-1){
                        out.write(temp);
                    }
                    out.close();
                    reader.close();
                } 
            }catch(Exception e){
                e.printStackTrace();
            } finally{
                //释放资源
                JDBCUtils.release(rs, preStmt, conn);
            }
        }
    }

    在上面案例中,将PreparedStatement对象读取到的数据保存到ResultSet中,然后通过循环的方式不断把内容取出来,写人到resume.txt文件中。程序执行完毕后,会在工程chapter01的根目录下发现resume.txt文件。


    2. 处理BLOB数据

    BLOB类型的操作与CLOB类似,只 BLOB专门用于存放二进制数据,如图片、电影等。为了帮助大家更好地学习BLOB数据的处理方式,接下来,在D盘下保存一个itcast.jpg图片,通过一个具体的案例来演示图片的存储和读取,具体步骤如下。

    (1) 首先在数据库chapter01中,创建一个数据表testblob,创建表的SOL语句如下所示。

    create table testblob(
        id int primary key auto_increment,
        img blob
    );

    (2) 在工程chapter01中,新建一个类BLOBDemo01,该类用于将图片写人表testblob中,BLOBDemo01的具体实现代码如下所示。

    BLOBDemo01.java

    package cn.itcast.jdbc.example;
    import java.io.*;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import cn.itcast.jdbc.example.utils.JDBCUtils;
    public class BLOBDemo01{
        public static void main (string[] args){
            Connection conn=null;
            Preparedstatement prestmt=null;
            try{
                conn=JDBCUtils.getConnection();
                String sql= "insert into testblob values (?,?)";
                prestmt = conn.prepareStatement(sql);
                prestmt .setInt(1,1);
                File file=new File("D:\itcast.jpg");
                InputStream in=new FileInputStream(file);
                prestmt.setBinaryStream(2, in,(int) file.length());
                prestmt.executeUpdate();
            }catch (Exception e){
                e.printStackTrace();
            }finally{
                //释放资源
                JDBCUtils.release(null,prestt,conn);
            }
        }
    }

    程序执行后,图片的信息就以二进制的形式保存到表testblob中,如果直接使用SELECT语句查看表testblob中的数据,则只能显示一些二进制数据,图片是无法显示的。

    (3) 在工程chapter01中,新建一个类BLOBDemo02,该类用于从数据库中读取要获取的图片,BLOBDemo02的具体实现方式如下所示。

    BLOBDemo02.java

    package cn.itcast.jdbc.example;
    import java.io.*;
    import java.sql.Connection;
    import java.sql.Preparedstatement;
    import java.sql.ResultSet;
    import cn.itcast.jdbc.example.utils.JDBCUtils;
    public class BLOBDemo02{
        public static void main(String [] args){
            Connection conn=null;
            PreparedStatement stmt=null;
            ResultSet rs=null;
            try{
                conn = JDBCUtils.getConnection();
                String sql = "select * from testblob where id=1";
                stmt = conn.prepareStatement(sql);
                rS = stmt.executeQuery();
                if (rs.next()){
                    InputStream in=new BufferedInputStream(
                        rs.getBinaryStream("img"));
                        OutputStream out=new BufferedoutputStream(
                            new FileOutputStream ("img .jpg"));
                        int temp;
                        while((temp=in.read()) != -1){
                            Out.write (temp);
                        }
                        out.close();
                        in.close();
                    )
                }catch (Exception e){
                    e.printStackTrace();
                } finally{
                    JDBCUtils.release(rs, stmt, conn);
                }
            }
        }
    }

    在上面案例中,使用PreparedStatement对象读取数据宏中所右础的见比出王诗取出来的图片无法显示,因此,将读取出来的图保存到img.jpg中。程序执行完毕后,可以直接可以直接在工程的根目录下发现img.jpg图片。

    0 分享到:
    和我们在线交谈!
    【网站地图】【sitemap】