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(); //数据库关闭
} }
使用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数据库——处理大数据对象的更多相关文章
- java 跨数据库导入大数据
java 跨数据库导入大数据 /** * java程序跨服务器跨数据库批量导入导出百万级数据 * @param args * @throws Exception */ public static vo ...
- Java在处理大数据的时候一些小技巧
Java在处理大数据的时候一些小技巧 发布时间:2013-05-09 00:00:00 来源:中国IT实验室 作者:佚名 关键字:Java 众所周知,java在处理数据量比较大的时候,加载到内存必 ...
- 处理大数据对象clob数据和blob数据
直接上下代码: package com.learn.jdbc.chap06; import java.io.File; import java.io.FileInputStream; import j ...
- 开发入门,学Java还是学大数据?
经常有人问,我想学习开发,到底是学Java好还是学大数据好?或者是,学习大数据还有必要学Java吗? 依我说,这个提问的标准答案是:两者都学. 先来甩两张图. 一张是腾讯 ...
- PDO操作大数据对象
一般在数据库中,我们保存的都只是 int . varchar 类型的数据,一是因为现代的关系型数据库对于这些内容会有很多的优化,二是大部分的索引也无法施加在内容过多的字段上,比如说 text 类型的字 ...
- c#几种数据库的大数据批量插入(SqlServer、Oracle、SQLite和MySql)
这篇文章主要介绍了c#几种数据库的大数据批量插入(SqlServer.Oracle.SQLite和MySql),需要的朋友可以了解一下. 在之前只知道SqlServer支持数据批量插入,殊不知道Ora ...
- java 导出Excel 大数据量,自己经验总结!
出处: http://lyjilu.iteye.com/ 分析导出实现代码,XLSX支持: /** * 生成<span style="white-space: normal; back ...
- 23个适合Java开发者的大数据工具和框架
转自:https://www.yidianzixun.com/article/0Ff4gqZQ?s=9&appid=yidian&ver=3.8.4&utk=6n9c2z37 ...
- Java编码规范之数据对象命名
数据对象分多种,为方便阅读并区分各数据对象的用途,习惯将数据对象分为以下几类,供参考: 持久对象 PO(persistant object)对象关系映射(ORM)概念的产物,基本上对象的成员变量对应了 ...
随机推荐
- restFull常用注解
@GET.@POST.@PUT.@DELETE.@HEAD您可以使用它们来绑定根资源或子资源内的 Java 方法与 HTTP 请求方法.HTTP GET 请求被映射到由 @GET 注释的方法,以此类推 ...
- git的配置
git的配置: Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量. 这些环境变量,决定了 Git 在各个环节的具体工作方式和行为.这些变量可以存放在以下三个不 ...
- Java--剑指offer(10)
46.每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指定一 ...
- ps打造逼真印章效果
新建500*500px--->路径工具 最后通过 通道扣取选取,填充白色,即可
- 逻辑回归&&code
没有正则化项的时候的二分类 #-*-coding=utf-8-*- from numpy import loadtxt,where, transpose import matplotlib.pyplo ...
- Javascript写俄罗斯方块游戏
俄罗斯方块这个游戏也做了移动端的兼容, 这个游戏难点是怎么翻转方块, 自己实现的方式是把方块放到一个二维数组, 然后逆时针旋转二维数组. 也有别的方法,比如直接用一个全局变量代表一个方向, 翻转的时候 ...
- Mysql-windows下修改密码
忘记密码修改(以下各种方法视情况而使用,本人测试,有些都是案情况才可行,但都是有设置成功过) 注:修改密码成功后一定要记得刷新下权限(否则将导致不能使用当前用户连接) mysql>FLUSH P ...
- HTTP协议学习---(十二)理解转发与重定向
解释一 转发是服务器行为,重定向是客户端行为.为什么这样说呢,这就要看两个动作的工作流程: 转发过程:客户浏览器发送http请求---->web服务器接受此请求-->调用内部的一个方法在容 ...
- Yii2美化confirm
在view中, <?= Html::a('删除', ['post/delete', 'id' => $post['id']],['data-confirm'=>'确定要删除吗?']) ...
- 猿题库 iOS 客户端架构设计
原文: http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=444322139&idx=1&sn=c7bef4d439f4 ...