JDBC:数据库操作:处理大对象CLOB数据
目标:
了解大对象处理基本原理,
掌握CLOB数据的读,写操作。
可以使用CLOB类处理大文本数据。
大对象处理主要指CLOB和BLOB两种类型字段。可以大量存储文字。
要想在程序中处理这样的大数据操作,则必须使用preparedStatement完成。所有文件内容通过IO流方式从大文本字段中保存和读取。
写入大数据对象;
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数据的更多相关文章
- 处理大数据对象clob数据和blob数据
直接上下代码: package com.learn.jdbc.chap06; import java.io.File; import java.io.FileInputStream; import j ...
- java操作oracle的blob,clob数据
一.区别和定义 LONG: 可变长的字符串数据,最长2G,LONG具有VARCHAR2列的特性,可以存储长文本一个表中最多一个LONG列 LONG RAW: 可变长二进制数据,最长2G CLOB: ...
- Statement和PreparedStatement的特点 MySQL数据库分页 存取大对象 批处理 获取数据库主键值
1 Statement和PreparedStatement的特点 a)对于创建和删除表或数据库,我们可以使用executeUpdate(),该方法返回0,表示未影向表中任何记录 b)对于创建和 ...
- Hibernate 中 联合主键映射 组合关系映射 大对象映射(或者说文本大对象,二进制数据大对象)
Clob:文本大对象,最长4G Blob:二进制数据大对象,最长4G util: public class HibUtil { private static SessionFactory sessio ...
- 深入浅出JDBC-操作时间与大对象(Clob/Blob)
一.时间(Date.Time.Timestamp) java.sql.Date/java.sql.Time/java.sql.Timestamp extends java.util.Date publ ...
- Oracle数据库中的大对象(LOB)数据类型介绍
一.LOB数据类型的介绍 大对象(LOB)数据类型允许我们保存和操作非结构化和半结构化数据,如文档.图形图像.视频片段.声音文件和XML文件等.DMBS_LOB 包被设计用于操作 LOB 数据类型.从 ...
- JDBC:数据库操作:事务
事务特征:原子性,一致性,独立性,持久性. 要想操作事务,必须按照以下步骤完成. 1,取消掉自动提交(SET AUTOCOMMIT=0):每次执行数据库更新的时候实际上发出SQL命令之后就已经提交上去 ...
- JDBC数据库操作
JDBC: 创建SQL语句对象 Statement statement = (Statement) con.createStatement() ; 调用执行 statement. ...
- 内置对象Clob对从数据库表中取的字符大对象CLOB类型的列值进行读取操作
package readclobDemo.bao; import java.io.IOException; import java.io.Reader; import java.sql.Clob; i ...
随机推荐
- 函数的扩展--ES6
箭头函数 由于大括号被解释为代码块,所以如果箭头函数直接返回一个对象,必须在对象外面加上括号. var f = () => ({a:1}); f(); // 返回 {a: 1} 若写成: var ...
- [BZOJ4003][JLOI2015]城池攻占(左偏树)
这题有多种做法,一种是倍增预处理出每个点往上走2^i步最少需要的初始战斗力,一种是裸的启发式合并带标记splay. 每个点合并能攻占其儿子的所有骑士,删去所有无法攻占这个城市的骑士并记录答案. 注意到 ...
- 【树形dp】Codeforces Round #405 (rated, Div. 1, based on VK Cup 2017 Round 1) B. Bear and Tree Jumps
我们要统计的答案是sigma([L/K]),L为路径的长度,中括号表示上取整. [L/K]化简一下就是(L+f(L,K))/K,f(L,K)表示长度为L的路径要想达到K的整数倍,还要加上多少. 于是, ...
- MySQL中变量的定义和变量的赋值使用(转)
说明:现在市面上定义变量的教程和书籍基本都放在存储过程上说明,但是存储过程上变量只能作用于begin...end块中,而普通的变量定义和使用都说的比较少,针对此类问题只能在官方文档中才能找到讲解. 前 ...
- [bzoj1010](HNOI2008)玩具装箱toy(动态规划+斜率优化+单调队列)
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有 的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1.. ...
- PHP时间戳是10位的,JS时间戳是13位
var dateStr = new Date(time * 1000);
- andriod 获得时间
import java.text.SimpleDateFormat;import java.util.Date; public static String getCurrentTime() { Sim ...
- 【maven】ecplise新建maven项目 报错Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin
在ecplise上新建maven项目 报错: Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resourc ...
- Xcode8从相册选图片
使用Xcode8写自己的东西有一段时间了,在使用Xcode8编程时不得不说我特别喜欢改后的默认字体,哈哈,当然默认字体是可以调回去的,只不过默认的字体感觉看起来比以前舒服了,毕竟不会像之前那么”字正腔 ...
- 自定义标签(JspFragment类、invoke方法、开发带属性的标签)
自定义标签(JspFragment类.invoke方法.开发带属性的标签) 一.JspFragment类 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定 ...