处理大数据对象
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(); //数据库关闭
} }