Java数据库编程---Clob
来源:互联网 发布:安卓模拟windows系统 编辑:程序博客网 时间:2024/04/29 22:33
处理大对象数据—处理CLOB数据。
大对象
大对象处理主要指的是CLOB和BLOB两种类型的字段,在CLOB中可以存储海量文字,例如,存储一部《三国演义》或者是《红楼梦》等。在BLOB中可以存储二进制数据,如图片、电影等等,如果在程序中要想处理这样的大对象操作,则必须使用PreparedStatement完成,所有的内容要通过IO流的方式从大文本字段中保存和读取。
处理CLOB数据
CLOB表示大文本数据,在MySQL中提供了LONGTEXT表示大文本数据,此字段的最大保存数据量为4G。例如,下面有如下的数据库创建脚本:
DROP TABLE userclob;
CREATE TABLE userclob
{
Id INT AUTO_INCREMENT PRIMARY KEY ,
Name VARCHAR(30) NOT NULL,
Note LONGTEXT
};
现有如下一个文本文件:
将以上的文本写入到数据表的字段之中。
【ClobDemo01.java的代码如下:】
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class ClobDemo01{
//定义MySQL的数据库驱动程序
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";
//定义MySQL数据库的连接地址
public static final String DBURL = "jdbc:mysql://localhost:3306/skewrain";
//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;
String name = "斜雨";
String sql = "INSERT INTO userclob(name,note) VALUES(?,?)";
Class.forName(DBDRIVER); //加载驱动程序
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS);
pstmt = conn.prepareStatement(sql); //创建PreparedStatement对象
File f = new File("d:" + File.separator + "skewrain.txt");
InputStream input = null;
input = new FileInputStream(f); //通过输入流读取文件
pstmt.setString(1,name);
pstmt.setAsciiStream(2,input,(int)f.length());
pstmt.executeUpdate();
conn.close(); //数据库关闭
}
};
编译运行的结果如下:
在数据库中,执行命令 SELECT * FROM userclob;
执行结果如下:
可见,文本文字已经能够被正确保存到数据库中了。
下面使用IO进行读取操作,读取的时候也需要使用IO流的方式读取进来。
【ClobDemo02.java的内容如下:】
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/skewrain";
//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); //创建PreparedStatement对象
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();
}
};
编译运行的结果如下:
可见,文件读取成功!
如果文件内容过大时,我们可以将文件的内容读取到一个本地文件中。
使用命令:java ClobDemo02 >d:\temp.txt
可以将程序的执行结果输出到一个本地文件中:【效果如下】
执行结果:
Clob类
以上的做法是将大文本数据内容直接通过ResultSet读取进来的,当然也可以使用ResultSet中提供的getClob()方法,将全部的内容变成Clob对象的内容,直接使用Clob可以方便的取得大文本的数据,也可以对这些文本数据进行一些简单的操作,如截取指定长度的文本等。
使用Clob类进行读取的方式如下:【ClobDemo03.java的内容如下】
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/skewrain";
//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); //创建PreparedStatement对象
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();
}
};
编译运行的结果如下所示:【前一部分和上一个程序的执行结果相同】
可见,数据读取成功。所以要想执行大文本的读写,可以使用IO流完成,或者直接使用Clob类完成。
- Java数据库编程---Clob
- 22---数据库编程08(Clob)
- java数据库编程--处理大对象数据(处理CLOB数据)
- java操作数据库中的Clob类型
- JAVA处理Oracle数据库CLOB读写操作
- Java 操作Oracle数据库Clob字段
- java 操作数据库clob类型大字段
- java 处理数据库clob类型的字段
- java语言操作Oracle数据库中的CLOB数据类型
- java语言操作Oracle数据库中的CLOB数据类型
- java语言操作Oracle数据库中的CLOB数据类型
- java语言操作Oracle数据库中的CLOB数据类型
- Oracle数据库中CLOB字段的比较,使用Java代码。
- java在oracle数据库中如何插入读取CLOB值
- java操作数据库中clob类型 之插入和查询
- 数据库的CLOB/BLOB字段存为本地txt java
- Mybaits 数据库的 CLOB 类型 与 java 类型 String
- 90.Java处理数据库中的Clob对象【ClobtoString】
- [An AC a day]1088_POJ_ACM
- SHELL : expect安装
- struts.xml的加载路径及配置问题
- cocos2dx3.0的触摸优先级和触摸屏蔽问题
- html获取页面大小
- Java数据库编程---Clob
- 微信的公众号和服务号
- 黑马程序员之学习正则表达式
- 寒假学习 第24天 (linux 高级编程)
- 使用异步过程调用(APC)实现模块注入
- 牛的旅行
- C#,JS 保留两位小数
- ( standard c libraries translation )close
- ios学习之路四(新建Sprite Kit 项目的时候出现apple LLVM 5.0 error)