zoukankan      html  css  js  c++  java
  • jdbc—CLOB和BLOB

    -CLOB(Character Large Object)

      - 用于存储大量的文本数据

      - 大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式来处理的。而非一般的字段,一次即可读出数据。

    - Mysql中相关类型

      - TINYTEXT最大长度为255(2^8-1)字符的TEXT列

      - TEXT(M)最大长度为65535(2^16-1)字符的TEXT列

      - MEDIUMTEXT最大长度为16777215(2^24 -1)字符的TEXT列

      - LONGTEXT最大长度为4294967295或4GB(2^32 -1)字符的TEXT列

    例子:

      将大数据文件存储到数据库中,或者将程序中的字符串等存储到CLOB的字段中,从DB中的CLOB字段里取出值。

      

    package com.yf.jdbc.test;
    
    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.sql.Clob;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * 测试CLOB(文本大对象)的使用
     * @author yangf
     *
     */
    public class Demo09 {
        
        public static void main(String[] args) {
            Connection con = null;
            PreparedStatement ps1 = null;
            PreparedStatement ps2 = null;
            ResultSet rs = null;
            try {
                // 加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 获得connection对象 建立与数据库连接
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc", "root", "123456");
                ps1 = con.prepareStatement("insert into t_user (username,myInfo) values (?,?)");
                
                ps1.setString(1, "yangf");
                ps1.setClob(2, new FileReader("d:a.txt"));
                // 或者将程序中的字符串登录到DB中
                ps1.setClob(2, new BufferedReader(new InputStreamReader(new ByteArrayInputStream("yangfyangf".getBytes()))));
                
                ps2 = con.prepareStatement("select * from t_user where id = ?");
                ps2.setInt(1, 22009);
                rs = ps2.executeQuery();
                while (rs.next()) {
                    Clob c = rs.getClob("myInfo");
                    Reader r = c.getCharacterStream();
                    int len = 0;
                    while (-1 != (len = r.read())) {
                        System.out.print((char) r.read());
                    }
                }
                
                
                ps1.execute();
                
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (ps1 != null) {
                    try {
                        ps1.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (con != null) {
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }

    - BLOB(Binary Large Object)

      - 用于存储大量的二进制数据

      - 大字段有些特殊,不同数据库处理的方式不一样。大字段的操作常常是以流的方式来处理进行的。而非一般的字段,可以一次性读出数据。

    - Mysql中相关类型

      - TINYBLOB最大长度为255(2^8 - 1)字节的BLOB列。

      - BLOB(M)最大长度为65535(2^16 - 1)字节的BLOB列。

      - MEDIUMBLOB最大长度为16777215(2^24 - 1)字节的BLOB列。

      - LONGBLOB最大长度为4294967295或4GB(2^32 - 1)字节的BLOB列。

    例子:将大数据存储到DB的BLOB字段中,从DB中取出BLOB字段的内容。

      

    package com.yf.jdbc.test;
    
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.sql.Blob;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    
    /**
     * 测试CLOB(文本大对象)的使用
     * @author yangf
     *
     */
    public class Demo10 {
        
        public static void main(String[] args) {
            Connection con = null;
            PreparedStatement ps1 = null;
            PreparedStatement ps2 = null;
            ResultSet rs = null;
            try {
                // 加载数据库驱动
                Class.forName("com.mysql.jdbc.Driver");
                // 获得connection对象 建立与数据库连接
                con = DriverManager.getConnection("jdbc:mysql://localhost:3306/testjdbc", "root", "123456");
                ps1 = con.prepareStatement("insert into t_user (username,headImg) values (?,?)");
                
                ps1.setString(1, "yangf123");
                ps1.setBlob(2, new FileInputStream("d:/head.jpg"));
                ps1.execute();
                
                // 取出数据库的BLOB信息
                ps2 =con.prepareStatement("select * from t_user where id = ?");
                ps2.setInt(1, 22010);
                rs = ps2.executeQuery();
                while (rs.next()) {
                    Blob blob = rs.getBlob("headImg");
                    InputStream is = blob.getBinaryStream();
                    int len = 0;
                    FileOutputStream os = new FileOutputStream("d:/yangf.jpg");
                    while ((len = is.read()) != -1) {
                        os.write(len);
                    }
                }
                
                
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (rs != null) {
                    try {
                        rs.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (ps1 != null) {
                    try {
                        ps1.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
                if (con != null) {
                    try {
                        con.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
  • 相关阅读:
    面向对象 :类的创建以及应用
    面向对象(1)
    HTML 表单和验证事件2
    HTML 表单和验证事件
    html的导航制作
    静态网页的window.document对象
    JavaScript的DOM操作
    Java Script基础
    静态网页的格式布局
    构造函数
  • 原文地址:https://www.cnblogs.com/yangfanasp/p/6858872.html
Copyright © 2011-2022 走看看