处理大数据对象

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(); //数据库关闭
} }

使用Blob读取内容

//=================================================
// 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; //数据库操作
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(); //查询 if(rs.next()){
String name = rs.getString(1);
System.out.println("姓名:"+name);
Blob b = rs.getBlob(2); //读取Blob数据
FileOutputStream out = null;
out = new FileOutputStream(new File("/home/common/software/database/photo_copy2.jpg"));
out.write(b.getBytes(1, (int)b.length()));
out.close();
}
pstmt.close(); //操作关闭
conn.close(); //数据库关闭
} }

Java数据库——处理大数据对象的更多相关文章

  1. java 跨数据库导入大数据

    java 跨数据库导入大数据 /** * java程序跨服务器跨数据库批量导入导出百万级数据 * @param args * @throws Exception */ public static vo ...

  2. Java在处理大数据的时候一些小技巧

    Java在处理大数据的时候一些小技巧 发布时间:2013-05-09 00:00:00 来源:中国IT实验室 作者:佚名   关键字:Java 众所周知,java在处理数据量比较大的时候,加载到内存必 ...

  3. 处理大数据对象clob数据和blob数据

    直接上下代码: package com.learn.jdbc.chap06; import java.io.File; import java.io.FileInputStream; import j ...

  4. 开发入门,学Java还是学大数据?

    经常有人问,我想学习开发,到底是学Java好还是学大数据好?或者是,学习大数据还有必要学Java吗?      依我说,这个提问的标准答案是:两者都学.      先来甩两张图.      一张是腾讯 ...

  5. PDO操作大数据对象

    一般在数据库中,我们保存的都只是 int . varchar 类型的数据,一是因为现代的关系型数据库对于这些内容会有很多的优化,二是大部分的索引也无法施加在内容过多的字段上,比如说 text 类型的字 ...

  6. c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)

    这篇文章主要介绍了c#几种数据库的大数据批量插入(SqlServer.Oracle.SQLite和MySql),需要的朋友可以了解一下. 在之前只知道SqlServer支持数据批量插入,殊不知道Ora ...

  7. java 导出Excel 大数据量,自己经验总结!

    出处: http://lyjilu.iteye.com/ 分析导出实现代码,XLSX支持: /** * 生成<span style="white-space: normal; back ...

  8. 23个适合Java开发者的大数据工具和框架

    转自:https://www.yidianzixun.com/article/0Ff4gqZQ?s=9&appid=yidian&ver=3.8.4&utk=6n9c2z37 ...

  9. Java编码规范之数据对象命名

    数据对象分多种,为方便阅读并区分各数据对象的用途,习惯将数据对象分为以下几类,供参考: 持久对象 PO(persistant object)对象关系映射(ORM)概念的产物,基本上对象的成员变量对应了 ...

随机推荐

  1. easyui-datagrid 的loader属性用法

    API介绍比较简略: 定义如何从远程服务器加载数据.返回false可以放弃本次请求动作.该函数接受以下参数:param:参数对象传递给远程服务器.success(data):当检索数据成功的时候会调用 ...

  2. 前博客 http://bbs.landingbj.com/mytopic.jsp?action=mytopic&username=57071

    在工作学习的过程中,遇到了亮眼的技术点,或者 学习的心得体会,总想要记录下来,或是方便自己,或是帮助如同自己现在这般的新人.前人种树,后人乘凉.享受了前人留下的阴凉,也会考虑自己给后来者种下几棵树苗. ...

  3. yum命令mysql,jdk,tomcat

    一.首先使用Yum list available xxx命令罗列出远程仓库里面可以安装的包 1.列出可以安装的java包 yum list available java* 输出如下: 2.列出可以安装 ...

  4. 中间值为什么为l+(r-l)/2,而不是(l+r)/2

    二分法的算法中,我们看到一些代码里取中间值: MID=l+(r-l)/2; 为什么是这个呢?不就是(l+r)/2吗?为什么要多此一举呢? 其实还是有不一样的,看看他们的区别吧: l,r是指针的时候只能 ...

  5. xargs 命令

    1. xargs 很好用,可以将多个结果分段传给下一个命令进行计算 比如说find 找到很多个文件,又想对每个文件统计条数: find 20151201 -name "mjoys*.txt& ...

  6. 51nod比赛

    http://www.cnblogs.com/wzj-is-a-juruo/p/5619901.html

  7. BZOJ1024 [SCOI2009]生日快乐

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转 ...

  8. dedecms /member/mtypes.php SQL Injection Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Dedecms会员中心注入漏洞 Relevant Link http:/ ...

  9. 分析ffmpeg解析ts流信息的源码

    花费一些时间,然后全部扔了.为了不忘记和抛砖引玉,特发此贴. ffmpeg解析ts流 1.目的     打算软件方式解析出pat,pmt等码流信息 2.源代码所在位置         下载ffmpeg ...

  10. CentOS禁用触摸板

    安装xorg-x11-apps包 yum install xorg-x11-apps 查看设备信息 cd /dev/input/ ls //找到触摸板信息 xinput list //找到触摸板的id ...