老邓的day19

编程软件:IntelliJ IDEA 2018.3 x64

应用环境:JDK1.8

人生名言:今天你是否成功取决于你昨天的态度,今天的态度决定了你明天是否成功。

技术总结:

6.1 LOB数据类型概述(注意:存路径)

#### 由于无结构的数据往往都是大型的,存储量非常大,而LOB(large object)类型主要用来支持无结构的大型数据.用户可以用LOB数据类型来存储大型的无结构数据,特别是文本,图形
,视频和音频等多媒体数据,系统还提供了随机访问这些LOB类型数据的有效办法. ### LOB数据类型可以分为以下几种:Oracle sun mysql jdk 1. BLOB:二进制LOB类型,用户存放无结构的二进制数据,最大4GB. binary 二进制 2. CLOB:字符LOB类型,用于存放字符数据,最大可以存储4GB. char character lob 3. NLOB:字符LOB类型,和CLOB相同,支持国家字符集.多字符集 GBK 4. BFILE:二进制文件类型,与数据库外的操作系统文件相关联,该文件存储二进制大对象. 对于BLOB和CLOB数据,表中存储的是指向该LOB数据的定位器,对于BFILE(数据存放在数据库的操作系统文件上),
表中存储的是指向外部文件的定位器.BLOB和CLOB数据类型属于Oracle内部数据类型,存储在数据库的表空间中,
在事务中可以使用DBMS_LOB包过程/PL/SQL程序或OCI程序修改,可以提交或回滚修改.而BFILE数据是只读的. BFILE类型仅提供随机读取数据,事务不能保证该类型的完整性,数据的完整性和可用性要在操作系统下维护. DBA要保证文件的存在和访问权限.初始化参数SESSION_MAX_OPEN_FILES设定一个会话最多可同时打开的文件最大数. # 使用LOB类型数据的限制: ### 系统不支持分布式LOB,用户不能在SELECT子句或WHERE子句中使用远程LOB定位器,也不能在DBMS_LOB包的子程序中使用远程定位器,也不能引用包含LOB属性的远程表中的对象. ### LOB列不能用于聚集表. ### LOB列不能出现在查询语句的GROUP BY,ORDER BY ,DISTINCT(去重复)之后,也不允许出现在分组函数和连接函数中. ### LOB类型不能出现在数组的定义中. ### LOB类型不能够出现在建有分区索引的表中. ### NCLOB类型不能作为对象类型的属性,当可以作为对象类型的方法的参数类型. IOE IBM DB2 Oracle MySQL 不同的数据库系统提供大对象数据类型有所不同,上面我们介绍了Oracle数据库系统(DBA)用于存储大对象数据的相关数据类型,
那么MySQL数据库和SQLServer2012数据库系统又使用哪些类型来存储这些LOB类型数据呢? MySQL数据库系统又使用了哪些类型来存储这些LOB类型数据呢? MySQLAB 对应Oracle用于存储LOB类型数据的数据类型: 十个亿 MariaDB MySQL BLOB和TEXT类型; MySQL的BLOB与LONBBLOB类型对应于Oracle的BLOB数据类型,而MySQL数据库的TEXT/LONGTEXT可以用于存储与Oracle数据库系统提供的CLOB类型数据. SQLServer2012数据库存储LOB类型的数据类型有:TEXT,VARBINARY,和IMAGE类型等,其中TEXT类型对应于Oracle数据库中的CLOB类型,
而VARBINARY和IMAGE类型对应于Oracle中的BLOB类型.

代码展示:

package Demo1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class DButil {
    static{
        try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static Connection getConnection(){
        try {
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/CLOB"
                    ,"root",null);
            return con;
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
    public static void closeConnection(Connection con){
        try {
            con.close();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static int update(String sql,Object...arr){
        Connection con = getConnection();
        try {
            PreparedStatement pt = con.prepareStatement(sql);
            for (int i = 0; i < arr.length; i++) {
                pt.setObject(i+1, arr[i]);
            }
            return pt.executeUpdate();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return -1;

    }
}


package Demo1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class JDBCMysqlDemo1 {
    public static void main(String[] args) {
        Connection con = DButil.getConnection();
        String sql = "insert into textclob values(?,?,?)";
        try {
            PreparedStatement pt = con.prepareStatement(sql);
            InputStream ip = new FileInputStream(new File("D:\\4399\\dzs.jpg"));
            pt.setObject(1,3);
            pt.setObject(2,"dzs.jpg");
            pt.setObject(3,ip);

            int i = pt.executeUpdate();
            if (i>0){
                System.out.println("添加成功");
            }else
            System.out.println("添加失败");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


package Demo1;

import java.io.*;
import java.sql.*;
import java.util.Scanner;

public class JDBCMysqlDemo2 {
    public static void main(String[] args) {
        Connection con = DButil.getConnection();
        String sql = "select * from textclob where cid = ?";
        try {
            PreparedStatement pt = con.prepareStatement(sql);
            pt.setObject(1,2);

            ResultSet rt = pt.executeQuery();
            if(rt.next()){
                int cid = rt.getInt("cid");
                String cname = rt.getString("cname");
                InputStream notes = rt.getAsciiStream("notes");


                OutputStream bufferedWriter = new FileOutputStream(new File("D:\\4399\\dzs2.jpg")) {
                    @Override
                    public void write(int b) throws IOException {

                    }
                };

                byte[]arr = new byte[notes.available()];
                while(notes.read(arr)!=-1){
                   bufferedWriter.write(arr);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

心得:

每一件事都要用多方面的角度来看它!

上一篇:pt-ioprofile


下一篇:ObjectArx-C++实现 坡度编辑命令-指定基点的情况下提示用户拾取另一个点