目标:

了解大对象处理基本原理,

掌握CLOB数据的读,写操作。

可以使用CLOB类处理大文本数据。

大对象处理主要指CLOB和BLOB两种类型字段。可以大量存储文字。

要想在程序中处理这样的大数据操作,则必须使用preparedStatement完成。所有文件内容通过IO流方式从大文本字段中保存和读取。

写入大数据对象;

使用PreparedStatement接口中的方法。

void setAsciiStream(int parameterIndex, InputStream x, int length)
将指定输入流写入数据库文本字段
void setBinaryStream(int parameterIndex, InputStream x, int length)
将二进制输入流数据写入二进制字段中。

读取大数据对象

使用ResultSet接口下方法读取:

CLOB表示大文本数据,MySQL中提供了LONGTEXT表示大文本数据,此字段最大保存数据量4G。

例如,下面数据库脚步:

create table userclob
(
id int,
name varchar(30),
note longtext
)

将以上的文本写入到数据表的字段中。

package 类集;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.PreparedStatement ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
public class ClobDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "aaaaaa" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ;//声明数据库预处理对象
String name = "小华" ; // 表示姓名
String sql = "INSERT INTO userclob(name,note) VALUES (?,?) " ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;//建立连接
pstmt = conn.prepareStatement(sql) ; // 创建PreapredStatement对象
File f = new File("d:" + File.separator + "mldn.txt") ;//创建文件对象实例
InputStream input = null ;
input = new FileInputStream(f) ; // 通过输入流读取文件

pstmt.setString(1,name) ;//设置第一个字段的值
pstmt.setAsciiStream(2,input,(int)f.length()) ;//将input实例指定的输入流设置给第二个字段,
pstmt.executeUpdate() ;//执行更新操作。
conn.close() ; // 数据库关闭
}
};

执行后查看结果:

下面使用IO流进行读取操作:

package 类集;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.PreparedStatement ;
import java.sql.ResultSet ;
import java.io.InputStream ;
import java.util.Scanner ;
public class ClobDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "aaaaaa" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ;
ResultSet rs = null ;
int id = 3 ; // 读取的编号
String sql = "SELECT name,note FROM userclob WHERE id=? " ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
pstmt = conn.prepareStatement(sql) ; // 创建PreapredStatement对象
pstmt.setInt(1,id) ;
rs = pstmt.executeQuery() ; //进行查询操作
if(rs.next()){ //如果查询的结果有值的话,读取第一条数据
String name = rs.getString(1) ;//读取这条数据的第一个字段值。
StringBuffer note = new StringBuffer() ;
System.out.println("姓名:" + name) ;
InputStream input = rs.getAsciiStream(2) ;//通过ResultSet接口的方法读取字节流,读取这条数据第二个字段值,
Scanner scan = new Scanner(input) ; // 使用Scanner类读取内容
scan.useDelimiter("\r\n") ; // 将文件换行作为分割符
while(scan.hasNext()){
note.append(scan.next()).append("\n") ;
}
System.out.println("内容:" + note) ;
input.close() ;
}
rs.close() ;
pstmt.close() ;
conn.close() ; // 数据库关闭
}
};

输出结果:

CLOB类

以上做法是将大文本数据对象直接通过ResultSet读取进来的,当然也可使用ResultSet中提供的getClob()方法,将全部内容编成CLOB对象,

直接使用CLOB可以方便取得大文本的数据。也可对这些文本进行简单操作,如截取指定字符串文本等。

ResultSet类获取CLOB对象方法:

 Clob getClob(int columnIndex)
以 Java 编程语言中 Clob 对象的形式获取此 ResultSet 对象的当前行中指定列的值。

CLOB类有一个方法进行文本截取。

 String getSubString(long pos, int length)
获取此 Clob 对象指定的 CLOB 值中指定子字符串的副本

CLOB类还有一个截断文本方法:

 void truncate(long len)
截取此 Clob 指定的 CLOB 值,使其长度为 len 个字符。
package 类集;
import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.PreparedStatement ;
import java.sql.Clob ;
import java.sql.ResultSet ;
public class ClobDemo01{
// 定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
// 定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/sys" ;
// MySQL数据库的连接用户名
public static final String DBUSER = "root" ;
// MySQL数据库的连接密码
public static final String DBPASS = "aaaaaa" ;
public static void main(String args[]) throws Exception{ // 所有异常抛出
Connection conn = null ; // 数据库连接
PreparedStatement pstmt = null ;
ResultSet rs = null ;
int id = 3 ; // 读取的编号 String sql = "SELECT name,note FROM userclob WHERE id=? " ;
Class.forName(DBDRIVER) ; // 加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
pstmt = conn.prepareStatement(sql) ; // 创建PreapredStatement对象
pstmt.setInt(1,id) ;//设置第一个参数的值为变量id的值
rs = pstmt.executeQuery() ;
if(rs.next()){
String name = rs.getString(1) ;
System.out.println("姓名:" + name) ;
Clob c = rs.getClob(2) ;
String note = c.getSubString(1,200) ;//截取前200个字符串
System.out.println("内容:" + note ) ;
c.truncate(100) ; // 只能读100个内容
System.out.println("部分读取内容:" + c.getSubString(1,(int)c.length())) ;
}
rs.close() ;
pstmt.close() ;
conn.close() ; // 数据库关闭
}
};

输出结果:

Tue Apr 18 23:18:51 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
姓名:小华
内容:345436453646fasdfdsagdfsadgwrtrfrgdsavdafsdfsadfdsaf345436453646fasdfdsagdfsadgwrtrfrgdsavdaf
sdfsadfdsafsdafdsafasd345436453646fasdfdsagdfsadgwrtrfrgdsavdafsdfsadfdsafsdafdsafasd345436453646fasdfdsa
部分读取内容:345436453646fasdfdsagdfsadgwrtrfrgdsavdafsdfsadfdsaf345436453646fasdfdsagdfsadgwrtrfrgdsavdaf
sdfsa

使用CLOB类可以非常方便的处理大数据的读取功能

JDBC:数据库操作:处理大对象CLOB数据的更多相关文章

  1. 处理大数据对象clob数据和blob数据

    直接上下代码: package com.learn.jdbc.chap06; import java.io.File; import java.io.FileInputStream; import j ...

  2. java操作oracle的blob,clob数据

    一.区别和定义 LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 LONG RAW: 可变长二进制数据,最长2G CLOB:  ...

  3. Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值

    1 Statement和PreparedStatement的特点   a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录   b)对于创建和 ...

  4. Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)

    Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessio ...

  5. 深入浅出JDBC-操作时间与大对象(Clob/Blob)

    一.时间(Date.Time.Timestamp) java.sql.Date/java.sql.Time/java.sql.Timestamp extends java.util.Date publ ...

  6. Oracle数据库中的大对象(LOB)数据类型介绍

    一.LOB数据类型的介绍 大对象(LOB)数据类型允许我们保存和操作非结构化和半结构化数据,如文档.图形图像.视频片段.声音文件和XML文件等.DMBS_LOB 包被设计用于操作 LOB 数据类型.从 ...

  7. JDBC:数据库操作:事务

    事务特征:原子性,一致性,独立性,持久性. 要想操作事务,必须按照以下步骤完成. 1,取消掉自动提交(SET AUTOCOMMIT=0):每次执行数据库更新的时候实际上发出SQL命令之后就已经提交上去 ...

  8. JDBC数据库操作

    JDBC:   创建SQL语句对象    Statement statement = (Statement) con.createStatement() ;   调用执行     statement. ...

  9. 内置对象Clob对从数据库表中取的字符大对象CLOB类型的列值进行读取操作

    package readclobDemo.bao; import java.io.IOException; import java.io.Reader; import java.sql.Clob; i ...

随机推荐

  1. JZYZOJ 1385 拉灯游戏 状态压缩 搜索

    http://172.20.6.3/Problem_Show.asp?id=1385   刚开始想的时候一直以为同一排不同的拉灯顺序对结果是有影响的,手推了好多遍才发现拉灯结果只和拉的灯有关,这也要打 ...

  2. Codeforces Round #449 (Div. 2)ABCD

    又掉分了0 0. A. Scarborough Fair time limit per test 2 seconds memory limit per test 256 megabytes input ...

  3. hdu 1402(FFT乘法 || NTT乘法)

    A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. 【BFS】The Morning after Halloween

    [POJ3523]The Morning after Halloween Time Limit: 8000MS   Memory Limit: 65536K Total Submissions: 23 ...

  5. 【线段树区间合并】POJ3667-Hotel

    [题意] 一段区间初始均为可行.有两个操作: 1→找出长度为w的一段可行区间,如果存在则返回这个可行区间最靠左的情况,并将该区间设为不可行: 2→将区间[a,b]设为可行区间. [思路] 经典的线段树 ...

  6. <摘录>MBR和分区表

    MBR 意思是主引导记录.位于硬盘的0柱面.0磁头.1扇区. MBR 大小为1个扇区,512字节. 下面是MBR的结构: 偏移                                    构 ...

  7. How do I find what queries were executing in a SQL memory dump?-----stack

     https://blogs.msdn.microsoft.com/askjay/2010/10/03/how-do-i-find-what-queries-were-executing-in-a-s ...

  8. win7与Ubuntu 13.04双系统修改启动项顺序

    在在win7下安装了Ubuntu 13.04后,在grub中,win7启动想是最后一个,为了把win7设置为默认启动项,需要更改grub设置.google了半天,发现更改/etc /default/g ...

  9. java使用HttpClient 发送get、pot请求

    package eidolon.messageback.PostUtil; import java.io.BufferedReader; import java.io.IOException; imp ...

  10. 查看Ubuntu服务器的版本信息

    第一种: uname -a 第二种: cat/etc/issue 第三种: lsb_release -a 这个查看的信息更加详细 使用命令:cat /proc/version 查看 proc目录下记录 ...