zoukankan      html  css  js  c++  java
  • 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();
        }
    }
     
     
  • 相关阅读:
    网易云信Duilib开发实践和Windows应用界面开发框架源码开源介绍
    WebRTC 之ICE浅谈
    如何做好 Android 端音视频测试?
    技术详解:实现互动直播全过程
    视频直播技术:最大限度保障流畅性和清晰度
    Python 爬虫之request+beautifulsoup+mysql
    Python之Mysql实战
    Python多线程的效率
    Python 调用Jenkins API自动化发布服务(完整版)
    Python爬虫之request +re
  • 原文地址:https://www.cnblogs.com/yangyquin/p/5387345.html
Copyright © 2011-2022 走看看