大对象数据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); } } }
运行结果:
- 普天同庆 ,无bug!!!