• 大对象数据LOB


    【 大对象数据LOB的应用】

    自足学习后问自己这四个问题(检验自己学习效果){

    1.what:无结构的大型数据 LOB Large Object

    2.why:用户可以用来存储大型无结构数据

    3.how:JDBC 特殊数据类型 LOB 代码能写出来 讲清楚-->思路没问题(伪代码)--->肯定可以写出来(工具,搜索)

    4.when/where 用户可以用来存储大型无结构数据

     }

    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类型.

    下面我们将介绍MySQL数据库对LOB类型数据的存取(读写)操作.

    CREATE DATABASE lob;

    USE lob;

    CREATE TABLE TEXTCLOB(

    CID INT NOT NULL PRIMARY KEY,

    CNAME VARCHAR(20),

    NOTES LONGTEXT

    );

    SELECT * FROM TEXTCLOB;

    1. 阿里开发规范

    2. java经典编程300例 涵盖了S1和S2几乎所有技术点

    3.计算机英文单词 参与

    JDBC连接数据库的主要步骤:

    1. Class.forName("com.mysql.jdbc.Driver");//反射 类对象 四种

    2.获取连接 Connection conn=DriverManager.getConnection(URL,USER,PASSWORD);

    3.编写SQL语句并发送 PrepapredStatement pstm=conn.prepareStatement(sql);

    4.获得数据库返回结果 (ResultSet rs) 增删改(int)

    5.关闭资源 public static void closeResource(Connection conn,PreparedStatement pstm,ResultSet rs)

    接下来我们开始编写JDBC程序代码,实现CLOB类型数据的读写操作,在完成此任务之前,先将JDBC连接数据库以及关闭数据库代码编写一个MySQLConnectionUtil.java类中,该类的代码如下所示:

    1.工具类 方法:封装,设置为静态方法,好处,调用方便.


    package com.guigu.jdbc;

    import java.sql.*;

    public class MySQLConnectionUtil {
       private static String DRIVER="com.mysql.jdbc.Driver";
       private static String URL="jdbc:mysql://127.0.0.1:3306/lob";
       private static String USERNAME="root";
       private static String PASSWORD="123456";

       public static Connection getConnection(){
           Connection connection=null;
           try {
               Class.forName(DRIVER);
               connection= DriverManager.getConnection(URL,USERNAME,PASSWORD);
          } catch (ClassNotFoundException e) {
               e.printStackTrace();
          } catch (SQLException e) {
               e.printStackTrace();
          }
           return connection;
      }

       public static void close(Connection connection, PreparedStatement preparedStatement, ResultSet resultSet){

               try {
                   if(resultSet!=null){
                   resultSet.close();
                  }
                   if (preparedStatement!=null){
                       preparedStatement.close();
                  }
                   if (connection!=null){
                       connection.close();
                  }
              } catch (SQLException e) {
                   e.printStackTrace();
              }

      }
    }




    package com.guigu.jdbc;

    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 JDBCMySQLCOLBWriter {
      public static void main(String[] args) {
          String sql="INSERT INTO TEXTCLOB VALUES (?,?,?)";
          Connection connection=MySQLConnectionUtil.getConnection();
          PreparedStatement preparedStatement=null;
          try {
                preparedStatement=connection.prepareStatement(sql);
                File file =new File("D:/workspace/site.txt");
                //使用输入流读写文本文件
              InputStream inputStream=new FileInputStream(file);
              //加载SQL语句中VALUES占位符参数
              preparedStatement.setInt(1,1);
              preparedStatement.setString(2,"site.txt");
              preparedStatement.setAsciiStream(3,inputStream);
              int count = preparedStatement.executeUpdate();
              if(count>0){
                  System.out.println("数据插入成功");
              }else{
                  System.out.println("数据插入失败");
              }

          } catch (SQLException e) {
              e.printStackTrace();
          } catch (FileNotFoundException e) {
              e.printStackTrace();
          }finally {
              MySQLConnectionUtil.close(connection,preparedStatement,null);
          }
      }
    }
    上面的示例中,我们需要将文本文件以文件流的方式写入MySQL数据库指定的字段是时,需要使用PreparedStatement对象调用其setAsciiStream()为存储文本文件加载数据.

    下面编写JDBC程序从MySQL数据库指定的数据表中读取大对象(CLOB)数据,实现代码如下:

     
  • 相关阅读:
    OD: Memory Attach Technology
    Chrome: Shockwave Flash isn't responding
    OD: Memory Attach Technology
    OD: Heap Exploit : DWORD Shooting & Opcode Injecting
    OD: Heap in Windows 2K & XP SP1
    OD: Writing Small Shellcode
    OD: Shellcode Encoding
    Set Windows IP by Batch
    OD: Universal Shellcode
    XenServer 使用笔记
  • 原文地址:https://www.cnblogs.com/xj1111/p/13615941.html
Copyright © 2020-2023  润新知