JDBC对LOB的读写

在JDBC中提供了java.sql.Blob和java.sql.Clob,两个类分别代表BLOB和CLOB数据。

        · BLOB(Binary Large Object):用于存储大量的二进制数据;
        · CLOB(Character Large Object):用于存储大量的文本数据。
    MySQL中的大容量字段类型:
        BLOB、TEXT最大64KB。BLOB是大小敏感的,而TEXT不是大写敏感的。MEDIUMBLOB、MEDIUMTEXT最大16MB。MEBIUMBLOB是大小写敏感的,而MEDIUMTEXT不是大小写敏感的。LONGBLOB、LONGTEXT最大4GB。LONGBLOB是大小写敏感的。
 
1)创建数据库表stuinfo,有id字段,姓名字段,简介字段,头像字段。头像字段设置为LONGBLOB类型。
create table stuinfo(
   id int(11) not null auto_increment,
   name varchar(20) default null,
   content longText,
   image longBlob,
   primary key(id)
)ENGINE=InnoDB default charset=utf8 row_format=redundant;
 
2)LOB写入文本文件和图片文件
注意:过低的mysql.jar版本会导致本案例不能正常运行,因此将mysql.jar包换成/mysql-connector-java-5.1.22-bin.jar
package com.yyq.blob;
import com.yyq.factory.CloseFactory;
import com.yyq.factory.ConnectionFactory;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* Created by gao on 16-4-13.
*/
public class BlobInsertTest {
public static void insert() throws SQLException{
Connection conn = ConnectionFactory.getConnection();
PreparedStatement pstmt = null;
String sql = "insert into stuinfo(name,content,image) values(?,?,?)";
BufferedReader brtxt = null;
InputStream isimg = null;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,"test");
// 从文件中获取输入流--读取文本
InputStream istxt = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("test.txt");
brtxt = new BufferedReader(new InputStreamReader(istxt));
//设置Blob
pstmt.setCharacterStream(2,brtxt);
//从文件中获取输入流--读取图片
isimg = Thread.currentThread().getContextClassLoader()
.getResourceAsStream("panda.png");
pstmt.setBinaryStream(3,isimg);
if (pstmt.executeUpdate() == 1){
System.out.println("恭喜成功添加一条记录!");
}else{
System.out.println("添加记录失败!");
}
}catch (SQLException e){
e.printStackTrace();
}finally {
try {
brtxt.close();
}catch (IOException e){
e.printStackTrace();
}
try{
isimg.close();
}catch (IOException e){
e.printStackTrace();
}
CloseFactory.close(pstmt,conn);
}
}
public static void main(String[] args) throws SQLException {
BlobInsertTest.insert();
}
}

 

3)LOB的读取

package com.yyq.blob;
import com.yyq.factory.CloseFactory;
import com.yyq.factory.ConnectionFactory;
import java.io.*;
import java.net.ConnectException;
import java.sql.*;
/**
* Created by gao on 16-4-13.
*/
public class BlobSelectTest {
public static void select() {
Connection conn = ConnectionFactory.getConnection();
PreparedStatement pstmt = null;
String sql = "select id,name,content,image from stuinfo where name=?";
ResultSet rs = null;
BufferedReader br = null;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "test");
rs = pstmt.executeQuery();
while (rs.next()) {
Reader rd = rs.getCharacterStream(3);
br = new BufferedReader(rd);
String str = null;
while ((str = br.readLine()) != null) {
System.out.println(str);
}
Blob blob = rs.getBlob(4);
BufferedInputStream bis = new BufferedInputStream(blob.getBinaryStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("newpanda.png"));
byte[] bys = new byte[1024];
int len = 0;
while ((len = bis.read(bys, 0, 1024)) != -1) {
bos.write(bys, 0, len);
}
bos.flush();
bos.close();
System.out.println("\n-------------图片写好了!");
}
}catch (SQLException e){
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
CloseFactory.close(pstmt,conn);
}
}
public static void main(String[] args) {
BlobSelectTest.select();
}
}
 
 

JDBC学习总结(四)的更多相关文章

  1. JDBC学习笔记(四)

    减少各个Dao类间的重复代码,有以下几种方式: 写一个DBConnectionManager,将公共的查询逻辑做成方法,将sql语句作为参数传递给方法. public class DBConnecti ...

  2. MyBatis学习 之 四、MyBatis配置文件

    目录(?)[-] 四MyBatis主配置文件 properties属性 settings设置 typeAliases类型别名 typeHandlers类型句柄 ObjectFactory对象工厂 pl ...

  3. JDBC学习笔记(2)——Statement和ResultSet

    Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.Statement ...

  4. JDBC学习笔记(1)——JDBC概述

    JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据库连接. JDBC库中所包含的API任务通常与数据库使用: 连接到数 ...

  5. 【转】JDBC学习笔记(2)——Statement和ResultSet

    转自:http://www.cnblogs.com/ysw-go/ Statement执行更新操作 Statement:Statement 是 Java 执行数据库操作的一个重要方法,用于在已经建立数 ...

  6. 【转】JDBC学习笔记(1)——JDBC概述

    转自:http://www.cnblogs.com/ysw-go/ JDBC JDBC API是一个Java API,可以访问任何类型表列数据,特别是存储在关系数据库中的数据.JDBC代表Java数据 ...

  7. jdbc学习总结

    jdbc学习总结:   一.简介: jdbc,直译为java连接数据库.实际为java为很好的操作数据库而提供的一套接口,接口的实现(即驱动)由各个数据库厂商提供.   二.知识要点: 连接5要素,3 ...

  8. (转)Maven学习总结(四)——Maven核心概念

    孤傲苍狼只为成功找方法,不为失败找借口! Maven学习总结(四)——Maven核心概念 一.Maven坐标 1.1.什么是坐标? 在平面几何中坐标(x,y)可以标识平面中唯一的一点. 1.2.Mav ...

  9. spring 学习(四): spring 的 jdbcTemplate 操作

    spring 学习(四): spring 的 jdbcTemplate 操作 spring 针对 javaee 的每一层,都提供了相应的解决技术,jdbcTemplate 的主要操作在 dao 层. ...

随机推荐

  1. 【转载】Powershell获取世纪互联Office365所有用户最后一次登录时间

    #$Mails=get-mailbox -ResultSize 10 $Mails=get-mailbox -ResultSize Unlimited $Mails | Measure-Object ...

  2. JDBC 基本操作: CRUD

    Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的executeUpdate方法,用于向 ...

  3. Linux命令练级初级

    Linux命令练级初级 http://ke.qq.com/video/index.html?course_id=6815 ls    -a 所有文件    -l    类型,连接数,所属用户,工作组, ...

  4. JPA学习---第二节:JPA开发环境和思想介绍

    一.下载相关 jar http://hibernate.org/orm/ 下载 hibernate ,解压 http://www.slf4j.org/download.html 下载 slf4j,解压 ...

  5. listview中getview异步加载网络图片

    前言:本以为异步加载挺简单,因为网上代码多,但真想要做好,还真不那么简单,从看代码到弄懂再到自己写,实在是有太多的东西需要学了,用了两天的时间,终于弄出来了,因为用到回调函数,所以理解起来可能难度有点 ...

  6. Eclipse 创建Maven工程

    前言 开发环境 sts-3.7.2.RELEASE 创建步骤 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显示创 ...

  7. ASP.NET MVC 4 插件化架构简单实现-实例篇

    先回顾一下上篇决定的做法: 1.定义程序集搜索目录(临时目录). 2.将要使用的各种程序集(插件)复制到该目录. 3.加载临时目录中的程序集. 4.定义模板引擎的搜索路径. 5.在模板引擎的查找页面方 ...

  8. 请求--拦截器--action经过

    引用我这里想知道的是同名的多个参数,会被自动的放置在List或者数组中,我想知道是怎么实现的,因为取一个参数和取多个同名的参数是不同的方法: 一个是request.getParameter 一个是re ...

  9. DOM对象和JQuery对象的区别

    DOM对象和JQuery对象的区别 jQuery对象和DOM对象使用说明,需要的朋友可以参考下.1.jQuery对象和DOM对象第一次学习jQuery,经常分辨不清哪些是jQuery对象,哪些是 DO ...

  10. C#操作config文件

    以下是app.config或web.config的定义,定义了一个参数,键为Isinit,值为false <?xml version="1.0"?> <confi ...