JAVA笔记:Java数据库编程(四):处理大数据对象

大数据对象主要指的是CLOB和BLOB两种类型的字段,在CLOB中可以存储海量文字,例如存储一本小说。在BLOB中可以存储二进制文件,如电影,图片等,如果在程序中要处理大的数据对象,则必须使用PreparedStatement
完成,所有的内容要通过IO流的方式从大字段文本中保存和读取。

写入大数据对象的主要方法:

读取大数据对象的主要方法:

处理CLOB数据

CLOB表示大文本数据(Character Large Object),在MySQL中提供了LONGTEXT字段表示大文本数据,这个字段的最大存储容量问4G。

可以通过IO流的方式读取文件内容:

import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.PreparedStatement ;
import java.sql.ResultSet ;
import java.io.File ;
import java.io.FileInputStream ;
import java.io.InputStream ;
import java.util.Scanner ;
public class ClobDemo02{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/root" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		Connection conn = null ;		// 数据库连接
		PreparedStatement pstmt = null ;
		ResultSet rs = null ;
		int id = 1 ;		// 读取的编号

		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) ;
			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中的getClob()方法,将全部的内容变为Clob对象的内容,直接使用Clob可以很方便的取得大数据的文本,也可以对文本数据进行简单的操作。

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 ClobDemo03{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/root" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		Connection conn = null ;		// 数据库连接
		PreparedStatement pstmt = null ;
		ResultSet rs = null ;
		int id = 1 ;		// 读取的编号

		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) ;
			System.out.println("姓名:" + name) ;
			Clob c = rs.getClob(2) ;
			String note = c.getSubString(1,(int)c.length()) ;
			System.out.println("内容:" + note ) ;
			c.truncate(100) ;	// 只能读100个内容
			System.out.println("部分读取内容:" + c.getSubString(1,(int)c.length())) ;
		}
		rs.close() ;
		pstmt.close() ;
		conn.close() ;			// 数据库关闭
	}
};

处理BLOB数据

BLOB数据和CLOB数据很相似,专门用来存放二进制数据,在MySQL中使用LONGBLOB来声明,最高可以保存4G大小的内容。

IO流读取:

import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.PreparedStatement ;
import java.io.File ;
import java.io.FileOutputStream ;
import java.sql.ResultSet ;
import java.io.InputStream ;
import java.io.InputStream ;
import java.io.OutputStream ;
public class BlobDemo02{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		Connection conn = null ;		// 数据库连接
		PreparedStatement pstmt = null ;
		ResultSet rs = null ;
		int id = 1 ;
		String sql = "SELECT name,photo FROM userblob WHERE id=?" ;
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		pstmt = conn.prepareStatement(sql) ;
		pstmt.setInt(1,id) ;
		rs = pstmt.executeQuery() ;	// 执行查询
		if(rs.next()){
			String name = rs.getString(1) ;
			System.out.println("姓名:" + name) ;
			InputStream input = rs.getBinaryStream(2) ;
			File f = new File("d:" + File.separator + "loadmldn.gif") ;	// 图片文件
			OutputStream out = null ;
			out = new FileOutputStream(f) ;
			int temp = 0 ;
			while((temp=input.read())!=-1){	// 边读边写
				out.write(temp) ;
			}
			input.close() ;
			out.close() ;
		}
		pstmt.close() ;
		conn.close() ;			// 数据库关闭
	}
};

也可以通过BLOB类进行操作:

import java.sql.Connection ;
import java.sql.DriverManager ;
import java.sql.SQLException ;
import java.sql.PreparedStatement ;
import java.sql.Blob ;
import java.sql.ResultSet ;
import java.io.File ;
import java.io.FileOutputStream ;
import java.io.InputStream ;
import java.io.InputStream ;
import java.io.OutputStream ;

public class BlobDemo03{
	// 定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
	// 定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
	// MySQL数据库的连接用户名
	public static final String DBUSER = "root" ;
	// MySQL数据库的连接密码
	public static final String DBPASS = "mysqladmin" ;
	public static void main(String args[]) throws Exception{	// 所有异常抛出
		Connection conn = null ;		// 数据库连接
		PreparedStatement pstmt = null ;
		ResultSet rs = null ;
		int id = 1 ;
		String sql = "SELECT name,photo FROM userblob WHERE id=?" ;
		Class.forName(DBDRIVER) ;	// 加载驱动程序
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
		pstmt = conn.prepareStatement(sql) ;
		pstmt.setInt(1,id) ;
		rs = pstmt.executeQuery() ;	// 执行查询
		if(rs.next()){
			String name = rs.getString(1) ;
			System.out.println("姓名:" + name) ;
			Blob b = rs.getBlob(2) ;
			File f = new File("d:" + File.separator + "loadmldn.gif") ;	// 图片文件
			OutputStream out = null ;
			out = new FileOutputStream(f) ;
			out.write(b.getBytes(1,(int)b.length())) ;
			out.close() ;
		}
		pstmt.close() ;
		conn.close() ;			// 数据库关闭
	}
};

这篇主要总结了下Java数据库中对大数据对象的操作,但是从实际使用和开发的过程来看,把太大的文件放在数据库中是一个不明智的选择,数据过大时往往是采用映射路径的方式写入的。

时间: 2024-10-21 21:03:54

JAVA笔记:Java数据库编程(四):处理大数据对象的相关文章

Java复习之数据库编程

一.JDBC概述 1. JDBC的主要作用(Java Database Connectivity,Java数据库连接) 提供了一种与平台无关的用于执行SQL语句的标准Java API,由一组用Java语言编写的类和接口组成 JDBC 驱动分类: JDBC-ODBC桥驱动 JDBC本地驱动 JDBC网络驱动 本地协议纯JDBC驱动 2. JDBC的主要操作接口 java.sql.DriverManager java.sql.Connection java.sql.Statement java.sq

JAVA笔记26-网络编程(不等于网站编程)

一.网络基础(TCP/IP详解) 1.IP协议(Internet Protocol):网络层,支持网间数据报通信.无连接数据报传送,数据报路由选择和差错控制. IPv4 32位(4字节),IPv6 128位(16字节).P ping ICMP协议 2.TCP协议.UDP协议 (1)TCP(transmission control protocol 打电话):专门设计用于在不可靠的因特网上提供可靠的.端到端的字节流通信的协议.它是一种面向连接的协议.有三次握手.慢 (2)UDP(user data

Java数据库——处理大数据对象

处理大数据对象 CLOB中可以存储海量文字 BLOB中可以存储海量二进制数据 如果程序中要想处理这样的大对象操作,则必须使用PreparedStatement完成,所有的内容要通过IO流的方式从大文本字段中保存和读取. 写入大文本数据 汉字的编码要改成gbk //================================================= // File Name : Clob_demo //-----------------------------------------

JAVA程序员为何都在转大数据呢?原来如此

首先JAVA的精密,强大,拥有其它语言不可替代的性能和可维护性,早已经是成为最受欢迎的编程语言之一,很多人想进入IT行业,首选的第一门语言就是JAVA.但是,在未来10年肯定是大数据的天下,人工智能的爆发,将会有大量企业会进入大数据领域,而从JAVA程序员转JAVA大数据就会有天然的优势,因为目前大数据的架构基本都是用JAVA语言完成,未来10年,JAVA大数据的需求量会越来越大. 现在学习JAVA的小伙伴,如果想以后不被淘汰,将来势必会进军大数据行列,根据目前的行业动态,JAVA程序员由于发展

分享一下Java程序猿最喜欢用的大数据工具

据日前的一则大数据工具使用情况调查,我们知道了Java程序猿最喜欢用的大数据工具. 问题:他们最近一年最喜欢用什么工具或者是框架? 受访者可以选择列表中的选项或者列出自己的,本文主要关心的是大数据工具.上一篇Java调查包括下列内容: 开发语言 Web框架 应用服务器 数据库工具 SQL数据 大数据 开发工具 云供应商 现在,来看看维基百科上对大数据的定义: 大数据,广义上来说是一组量很大很复杂的数据集合,在这种情况下传统的数据处理方式将不再适用. 对于一般情况来说传统的SQL数据库足够用.再另

大数据学习笔记6·社会计算中的大数据(4)

上一篇介绍了LifeSpec项目,这个项目是关于用户理解和用户画像的.这篇是社会计算部分的最后一篇,关于用户连接和图隐私. 用户连接与隐私保护 用户连接与隐私保护有很强的相关性. 上图中,左边有两个网络.对于用户连接,我们的目标是映射这两个网络和连接这些网络中的用户节点.然后,我们就能产生一个更大的网络.这样,用户就能够被连接在一起,我们就可以知道跨网络的用户信息. 但是,如果从隐私的角度来看这个问题,把第一个图看成一个匿名化处理后的图,称其为目标图:把第二张图看成辅助图或者攻击者可获得的信息.

学大数据需要什么编程基础?大数据学习步骤是什么?

学大数据需要什么编程基础?大数据学习步骤是什么? 大数据是什么? 有很多朋友问过我,大数据到底是什么?一句话来- 学大数据需要什么编程基础?大数据学习步骤是什么?大数据是什么? 有很多朋友问过我,大数据到底是什么?一句话来概括 针对非软件行业的朋友 根据你平时在超市,加油站,饭店等地方的一些消费行为,通过大数据这个技术,我们可以知道你现在的年龄范围,是否婚配,是否有孩子,孩子大致是几岁,是否有固定住宅,车大致是什么价位的等信息. 针对软件行业的朋友 平时我们写的程序都是在一台机器上运行,处理能力

[WP8.1UI控件编程]Windows Phone大数据量网络图片列表的异步加载和内存优化

11.2.4 大数据量网络图片列表的异步加载和内存优化 虚拟化技术可以让Windows Phone上的大数据量列表不必担心会一次性加载所有的数据,保证了UI的流程性.对于虚拟化的技术,我们不仅仅只是依赖其来给列表加载数据,还可以利用虚拟化的特性去做更多的事情.虚拟化技术有一个很重要的特性就是,它可以准确地判断出哪些列表项处于手机屏幕中,可以动态地去更新这些数据.基于这样的特性,我们可以给列表的功能做更多的优化. 那么下面我们基于一个例子来讲解利用虚拟化技术去做列表的性能优化.有这么一个需求,需要

最好用的兼容多种数据库通用高效的大数据分页功能

通用权限管理系统底层有一个通用分页查询功能,该功能可实现多种数据库的查询,支持多表关联分页查询,目前是最完善的分页功能实现. 下面代码是使用的方法截图: /////////////////////////////// 后台代码截图1 /////////////////////////////// 后台代码截图2 /////////////////////////////// 后台代码截图3 /////////////////////////////// 后台代码截图4 /////////////