码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2015-02-06 11:18:37      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

大数据对象主要指的是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数据库中对大数据对象的操作,但是从实际使用和开发的过程来看,把太大的文件放在数据库中是一个不明智的选择,数据过大时往往是采用映射路径的方式写入的。





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

标签:

原文地址:http://blog.csdn.net/tryitboy/article/details/43561295

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!