失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > JDBC:数据库操作:处理大对象CLOB数据

JDBC:数据库操作:处理大对象CLOB数据

时间:2021-03-17 03:59:07

相关推荐

JDBC:数据库操作:处理大对象CLOB数据

目标:

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

掌握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),notelongtext)

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

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 ; // 读取的编号Stringsql= "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) ;//读取这条数据的第一个字段值。StringBuffernote= 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 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.姓名:小华内容:345436453646fasdfdsagdfsadgwrtrfrgdsavdafsdfsadfdsaf345436453646fasdfdsagdfsadgwrtrfrgdsavdafsdfsadfdsafsdafdsafasd345436453646fasdfdsagdfsadgwrtrfrgdsavdafsdfsadfdsafsdafdsafasd345436453646fasdfdsa部分读取内容:345436453646fasdfdsagdfsadgwrtrfrgdsavdafsdfsadfdsaf345436453646fasdfdsagdfsadgwrtrfrgdsavdafsdfsa

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

如果觉得《JDBC:数据库操作:处理大对象CLOB数据》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。