zoukankan      html  css  js  c++  java
  • 老邓的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();
            }
        }
    }

    心得:

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

  • 相关阅读:
    字符串hash
    堆优化的最短路
    unordered_map 的火车头
    扩展欧几里得求ax+by=c的最小正整数解
    欧拉筛
    Codeforces Round 649 (Rated for Div. 2)D. Ehab s Last Corollary (图论+简单环)
    牛客SQL题解-找出所有员工具体的薪水salary情况
    牛客SQL题解-查找薪水变动超过15次的员工号emp_no以及其对应的变动次数t
    牛客SQL题解-查找所有已经分配部门的员工的last_name和first_name以及dept_no,也包括暂时没有分配具体部门的员工
    牛客SQL题解- 查找所有已经分配部门的员工的last_name和first_name
  • 原文地址:https://www.cnblogs.com/www-dzsblogs-com/p/13621983.html
Copyright © 2011-2022 走看看