• JDBC学习总结(四)


    JDBC对LOB的读写

    在JDBC中提供了java.sql.Blob和java.sql.Clob,两个类分别代表BLOB和CLOB数据。

            · BLOB(Binary Large Object):用于存储大量的二进制数据;
            · CLOB(Character Large Object):用于存储大量的文本数据。
        MySQL中的大容量字段类型:
            BLOB、TEXT最大64KB。BLOB是大小敏感的,而TEXT不是大写敏感的。MEDIUMBLOB、MEDIUMTEXT最大16MB。MEBIUMBLOB是大小写敏感的,而MEDIUMTEXT不是大小写敏感的。LONGBLOB、LONGTEXT最大4GB。LONGBLOB是大小写敏感的。
     
    1)创建数据库表stuinfo,有id字段,姓名字段,简介字段,头像字段。头像字段设置为LONGBLOB类型。
    create table stuinfo(
       id int(11) not null auto_increment,
       name varchar(20) default null,
       content longText,
       image longBlob,
       primary key(id)
    )ENGINE=InnoDB default charset=utf8 row_format=redundant;
     
    2)LOB写入文本文件和图片文件
    注意:过低的mysql.jar版本会导致本案例不能正常运行,因此将mysql.jar包换成/mysql-connector-java-5.1.22-bin.jar
    package com.yyq.blob;
    import com.yyq.factory.CloseFactory;
    import com.yyq.factory.ConnectionFactory;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.SQLException;
    /**
     * Created by gao on 16-4-13.
     */
    public class BlobInsertTest {
        public static void insert() throws SQLException{
            Connection conn = ConnectionFactory.getConnection();
            PreparedStatement pstmt = null;
            String sql = "insert into stuinfo(name,content,image) values(?,?,?)";
            BufferedReader brtxt = null;
            InputStream isimg = null;
            try {
                pstmt = conn.prepareStatement(sql);
                pstmt.setString(1,"test");
                // 从文件中获取输入流--读取文本
                InputStream istxt =  Thread.currentThread().getContextClassLoader()
                        .getResourceAsStream("test.txt");
                brtxt = new BufferedReader(new InputStreamReader(istxt));
                //设置Blob
                pstmt.setCharacterStream(2,brtxt);
                //从文件中获取输入流--读取图片
                isimg = Thread.currentThread().getContextClassLoader()
                        .getResourceAsStream("panda.png");
                pstmt.setBinaryStream(3,isimg);
                if (pstmt.executeUpdate() == 1){
                    System.out.println("恭喜成功添加一条记录!");
                }else{
                    System.out.println("添加记录失败!");
                }
            }catch (SQLException e){
                e.printStackTrace();
            }finally {
                try {
                    brtxt.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
                try{
                    isimg.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
                CloseFactory.close(pstmt,conn);
            }
        }
        public static void main(String[] args) throws SQLException {
            BlobInsertTest.insert();
        }
    }

     

    3)LOB的读取

    package com.yyq.blob;
    import com.yyq.factory.CloseFactory;
    import com.yyq.factory.ConnectionFactory;
    import java.io.*;
    import java.net.ConnectException;
    import java.sql.*;
    /**
     * Created by gao on 16-4-13.
     */
    public class BlobSelectTest {
        public static void select() {
            Connection conn = ConnectionFactory.getConnection();
            PreparedStatement pstmt = null;
            String sql = "select id,name,content,image from stuinfo where name=?";
            ResultSet rs = null;
            BufferedReader br = null;
            try {
                pstmt = conn.prepareStatement(sql);
                pstmt.setString(1, "test");
                rs = pstmt.executeQuery();
                while (rs.next()) {
                    Reader rd = rs.getCharacterStream(3);
                    br = new BufferedReader(rd);
                    String str = null;
                    while ((str = br.readLine()) != null) {
                        System.out.println(str);
                    }
                    Blob blob = rs.getBlob(4);
                    BufferedInputStream bis = new BufferedInputStream(blob.getBinaryStream());
                    BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("newpanda.png"));
                    byte[] bys = new byte[1024];
                    int len = 0;
                    while ((len = bis.read(bys, 0, 1024)) != -1) {
                        bos.write(bys, 0, len);
                    }
                    bos.flush();
                    bos.close();
                    System.out.println("
    -------------图片写好了!");
                }
            }catch (SQLException e){
                e.printStackTrace();
            }catch (IOException e){
                e.printStackTrace();
            }finally {
                CloseFactory.close(pstmt,conn);
            }
        }
        public static void main(String[] args) {
            BlobSelectTest.select();
        }
    }
     
     
  • 相关阅读:
    delphi7 projectoptions打开出错
    file not found frmaddBdsuo.dcu
    session 不活动是因为未注册 WebSessionActivator,或试图在 IHttpHandler 的构造函数中 访问session
    oracle导出指定的表,并将指定的表追加到其他dmp文件中(不影响dmp中其他的表)
    父类指针转换成子类指针
    为什么会是这样的输出结果
    字符数组
    变量的声明和定义
    const对象默认为文件的局部变量
    输出结果
  • 原文地址:https://www.cnblogs.com/yangyquin/p/5387345.html
Copyright © 2020-2023  润新知