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

Posted tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数据库——处理大数据对象相关的知识,希望对你有一定的参考价值。

处理大数据对象

CLOB中可以存储海量文字

BLOB中可以存储海量二进制数据

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

技术分享

 

 

写入大文本数据

 技术分享

技术分享

汉字的编码要改成gbk

//=================================================
// File Name       :	Clob_demo
//------------------------------------------------------------------------------
// Author          :	Common

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.*;
import java.text.SimpleDateFormat;

//主类
//Function        : 	Clob_demo
public class Clob_demo {

	//定义mysql的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
	//定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo";
	//MySQL数据库的连接用户名
	public static final String DBUSER = "root";
	//MySQL数据库的连接密码
	public static final String DBPASS = "123456";
	
	public static void main(String[] args) throws Exception{
		// TODO 自动生成的方法存根
		Connection conn = null;						//数据库连接
		PreparedStatement pstmt = null;	//数据库操作

		String name = "张三";
		String sql = "INSERT INTO userclob(name,note) VALUES (?,?) ";
		Class.forName(DBDRIVER);			//加载驱动程序
		//连接MySQL数据库时,要写上连接的用户名和密码
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		pstmt = conn.prepareStatement(sql);		//实例化PreparedStatement
		//声明一个File对象,用于找到要操作的大文本文件
		File f = new File("/home/common/software/database/zhangsan.txt");
		InputStream input = null;				//通过输入流读取内容
		input = new FileInputStream(f);		//通过输入流读取文件
		pstmt.setString(1, name); 				//设置第一个“?”的内容
		pstmt.setAsciiStream(2,input, (int)f.length()); 				//设置输入流
		pstmt.executeUpdate();					//执行数据库更新操作
		pstmt.close();										//操作关闭
		conn.close();										//数据库关闭
	}

}

 

读取大文本字段

//=================================================
// File Name       :	Clob_demo
//------------------------------------------------------------------------------
// Author          :	Common

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Scanner;

//主类
//Function        : 	Clob_demo
public class Clob_demo {

	//定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
	//定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo";
	//MySQL数据库的连接用户名
	public static final String DBUSER = "root";
	//MySQL数据库的连接密码
	public static final String DBPASS = "123456";
	
	public static void main(String[] args) throws Exception{
		// TODO 自动生成的方法存根
		
		Connection conn = null;						//数据库连接
		PreparedStatement pstmt = null;	//数据库操作
		ResultSet rs = null;								//保存结果集
		
		int id = 2;
		String sql = "SELECT name,note FROM userclob WHERE id=?";
		Class.forName(DBDRIVER);			//加载驱动程序
		//连接MySQL数据库时,要写上连接的用户名和密码
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		pstmt = conn.prepareStatement(sql);		//实例化PreparedStatement
		pstmt.setInt(1, id);     									//设置查询的id
		rs = pstmt.executeQuery();							//查询
		
		while(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);					//接收数据
			scan.useDelimiter("\r\n");										//将文件换行作为分隔符
			while(scan.hasNext()){
				note.append(scan.next()).append("\n");			//不断读取内容
			}
			System.out.println("内容:"+note);
			input.close();
		}
		
		pstmt.close();										//操作关闭
		conn.close();										//数据库关闭
	}

}

 技术分享

//=================================================
// File Name       :	Clob_demo
//------------------------------------------------------------------------------
// Author          :	Common

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Scanner;

//主类
//Function        : 	Clob_demo
public class Clob_demo {

	//定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
	//定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo";
	//MySQL数据库的连接用户名
	public static final String DBUSER = "root";
	//MySQL数据库的连接密码
	public static final String DBPASS = "123456";
	
	public static void main(String[] args) throws Exception{
		// TODO 自动生成的方法存根
//		Connection conn = null;						//数据库连接
//		PreparedStatement pstmt = null;	//数据库操作
//
//		String name = "张三";
//		String sql = "INSERT INTO userclob(name,note) VALUES (?,?) ";
//		Class.forName(DBDRIVER);			//加载驱动程序
//		//连接MySQL数据库时,要写上连接的用户名和密码
//		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
//		pstmt = conn.prepareStatement(sql);		//实例化PreparedStatement
//		//声明一个File对象,用于找到要操作的大文本文件
//		File f = new File("/home/common/software/database/无标题文档");
//		InputStream input = null;				//通过输入流读取内容
//		input = new FileInputStream(f);		//通过输入流读取文件
//		pstmt.setString(1, name); 				//设置第一个“?”的内容
//		pstmt.setAsciiStream(2,input, (int)f.length()); 				//设置输入流
//		pstmt.executeUpdate();					//执行数据库更新操作
//		pstmt.close();										//操作关闭
//		conn.close();										//数据库关闭
		
//		Connection conn = null;						//数据库连接
//		PreparedStatement pstmt = null;	//数据库操作
//		ResultSet rs = null;								//保存结果集
//		
//		int id = 2;
//		String sql = "SELECT name,note FROM userclob WHERE id=?";
//		Class.forName(DBDRIVER);			//加载驱动程序
//		//连接MySQL数据库时,要写上连接的用户名和密码
//		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
//		pstmt = conn.prepareStatement(sql);		//实例化PreparedStatement
//		pstmt.setInt(1, id);     									//设置查询的id
//		rs = pstmt.executeQuery();							//查询
//		
//		while(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);					//接收数据
//			scan.useDelimiter("\r\n");										//将文件换行作为分隔符
//			while(scan.hasNext()){
//				note.append(scan.next()).append("\n");			//不断读取内容
//			}
//			System.out.println("内容:"+note);
//			input.close();
//		}
//		
//		pstmt.close();										//操作关闭
//		conn.close();										//数据库关闭
		
		Connection conn = null;						//数据库连接
		PreparedStatement pstmt = null;	//数据库操作
		ResultSet rs = null;								//保存结果集
		
		int id = 2;
		String sql = "SELECT name,note FROM userclob WHERE id=?";
		Class.forName(DBDRIVER);			//加载驱动程序
		//连接MySQL数据库时,要写上连接的用户名和密码
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		pstmt = conn.prepareStatement(sql);		//实例化PreparedStatement
		pstmt.setInt(1, id);     									//设置查询的id
		rs = pstmt.executeQuery();							//查询
		
		while(rs.next()){	
			String name = rs.getString(1);			//取出name列的内容
			Clob c = rs.getClob(2);							//取出大文本数据
			String note = c.getSubString(1, (int)c.length());	//CLOB开始的位置为1
			System.out.println("姓名:"+name);
			System.out.println("内容:"+note);
			c.truncate(100);
			System.out.println("部分的读取内容:"+c.getSubString(1,  (int)c.length()));
		}
		
		pstmt.close();										//操作关闭
		conn.close();										//数据库关闭
	}

}

 

处理BLOB数据

技术分享

 

create table userblob(id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(30) NOT NULL,photo LONGBLOB);

 

//=================================================
// File Name       :	Blob_demo
//------------------------------------------------------------------------------
// Author          :	Common

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Scanner;

//主类
//Function        : 	Blob_demo
public class Blob_demo {

	//定义MySQL的数据库驱动程序
	public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
	//定义MySQL数据库的连接地址
	public static final String DBURL = "jdbc:mysql://localhost:3306/mysql_demo";
	//MySQL数据库的连接用户名
	public static final String DBUSER = "root";
	//MySQL数据库的连接密码
	public static final String DBPASS = "123456";
	
	public static void main(String[] args) throws Exception{
		// TODO 自动生成的方法存根
		
//		Connection conn = null;						//数据库连接
//		PreparedStatement pstmt = null;	//数据库操作
//		
//		String name = "赵六";
//		String sql = "INSERT INTO userblob(name,photo) VALUES (?,?) ";
//		Class.forName(DBDRIVER);			//加载驱动程序
//		//连接MySQL数据库时,要写上连接的用户名和密码
//		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
//		pstmt = conn.prepareStatement(sql);		//实例化PreparedStatement
//		//声明一个File对象,用于找到要操作的大文本文件
//		File f = new File("/home/common/software/database/photo.jpg");
//		InputStream input = null;				//通过输入流读取内容
//		input = new FileInputStream(f);		//通过输入流读取文件
//		pstmt.setString(1, name); 				//设置第一个“?”的内容
//		pstmt.setBinaryStream(2,input, (int)f.length()); 				//设置输入流
//		pstmt.executeUpdate();					//执行数据库更新操作
//		pstmt.close();										//操作关闭
//		conn.close();										//数据库关闭
		
		Connection conn = null;						//数据库连接
		PreparedStatement pstmt = null;	//数据库操作
		ResultSet rs = null;								//保存结果集
		
		int id = 1;
		String sql = "SELECT name,photo FROM userblob WHERE id=?";
		Class.forName(DBDRIVER);			//加载驱动程序
		//连接MySQL数据库时,要写上连接的用户名和密码
		conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
		pstmt = conn.prepareStatement(sql);		//实例化PreparedStatement
		pstmt.setInt(1, id);				//设置查询的id
		rs = pstmt.executeQuery();							//查询
		
		while(rs.next()){
			String name = rs.getString(1);
			StringBuffer note = new StringBuffer();
			System.out.println("姓名:"+name);
			InputStream input = rs.getBinaryStream(2);		//接收全部的大文本数据
			FileOutputStream out = null;
			out = new FileOutputStream(new File("/home/common/software/database/photo_copy.jpg"));
			int temp = 0;
			while((temp = input.read()) != -1){							//边读边写
				out.write(temp);
			}
			input.close();
			out.close();
		}
		pstmt.close();										//操作关闭
		conn.close();										//数据库关闭
	}

}

 

以上是关于Java数据库——处理大数据对象的主要内容,如果未能解决你的问题,请参考以下文章

关于MATLAB处理大数据坐标文件2017622

R语言可以处理大的数据吗

Redux - 处理非常大的状态对象

python中的多处理-在多个进程之间共享大对象(例如pandas数据框)

大数据处理学习笔记1.7 Scala类与对象

如何在基于 webpack-react-node 的网站中处理非常大的数据(100000 个 javascript 对象)?