大对象数据LoB的应用
- 
LOB数据类型概述由于无结构的数据往往都是大型的,存储量非常大,而LOB(large object)类型主要用来支持无结构的大型数据.用户可以用LOB数据类型来存储大型的无结构数据,特别是文本,图形,视频和音频等多媒体数据,系统还提供了随机访问这些LOB类型数据的有效办法.
- 
LOB数据类型可以分为以下几种:- 
BLOB:二进制LOB类型,用户存放无结构的二进制数据,最大4GB. binary 二进制
- 
CLOB:字符LOB类型,用于存放字符数据,最大可以存储4GB.
- 
NLOB:字符LOB类型,和CLOB相同,支持国家字符集.多字符集 GBK
- 
BFILE:二进制文件类型,与数据库外的操作系统文件相关联,该文件存储二进制大对象.
 
- 
- 
使用LOB类型数据的限制:- 
系统不支持分布式LOB,用户不能在SELECT子句或WHERE子句中使用远程LOB定位器,也不能在DBMS_LOB包的子程序中使用远程定位器,也不能引用包含LOB属性的远程表中的对象.
- 
LOB列不能用于聚集表.
- 
LOB列不能出现在查询语句的GROUP BY,ORDER BY ,DISTINCT(去重复)之后,也不允许出现在分组函数和连接函数中.
- 
LOB类型不能出现在数组的定义中.
- 
LOB类型不能够出现在建有分区索引的表中.
- 
NCLOB类型不能作为对象类型的属性,当可以作为对象类型的方法的参数类型.
 
- 
- 
下面我们将运用Mysql数据库对LOB类型数据进行存取操作:- 
数据库代码展示:
 CREATE DATABASE lob;
 
 USE lob;
 
 CREATE TABLE TEXTCLOB(
 
 CID INT NOT NULL PRIMARY KEY,
 
 CNAME VARCHAR(20),
 
 NOTES LONGTEXT
 
 );
 
 SELECT * FROM TEXTCLOB;
- 
DBUtil工具类代码展示:
 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();
 }
 
 }
 }
- 
main主程序类代码展示:
 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数据库查询结果: ![]() 
 
- 
- 
心得活到老学到老,愿我们前程似锦,学海无边,早日实现财富自由
 
                    
                


 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号