MySQL存取大文本及二进制文件(图片)

9 篇文章 0 订阅
package cn.com.songjy.test.db;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class MySQLText {

private static final Log log = LogFactory.getLog(MySQLText.class);

private static final String id = "2";

private static final BufferedInputStream bufferedInputStream = new BufferedInputStream(
MySQLText.class.getClassLoader().getResourceAsStream(
"cn/com/songjy/test/db/mysql.properties"));

private static final Properties props = new Properties();

static {
try {
props.load(bufferedInputStream);
Class.forName(props.getProperty("driver"));
} catch (IOException e) {
log.error(e.getMessage(), e);
} catch (ClassNotFoundException e) {
log.error(e.getMessage(), e);
} finally {
try {
if (null != bufferedInputStream)
bufferedInputStream.close();
} catch (IOException e) {
log.error(e.getMessage(), e);
}
}
}

public Connection getConnection() throws SQLException {
log.info(props.getProperty("url"));
return DriverManager.getConnection(props.getProperty("url"),
props.getProperty("user"), props.getProperty("password"));
}

// 使用JDBC保存大文本
public void save_text() throws SQLException, IOException {
Connection connection = null;
PreparedStatement preparedStatement = null;
BufferedReader bufferedReader = null;
try {
connection = getConnection();

preparedStatement = connection
.prepareStatement("INSERT INTO testclob(id,resume) VALUES(?,?)");

preparedStatement.setString(1, id);

File txt = new File(
"src/main/java/cn/com/songjy/test/db/MySQLText.java");

bufferedReader = new BufferedReader(new FileReader(txt));

// preparedStatement.setCharacterStream(2, reader, txt.length());
preparedStatement.setCharacterStream(2, bufferedReader);

log.info(preparedStatement.executeUpdate() > 0 ? "保存文本成功"
: "保存文本失败");
} finally {
if (null != bufferedReader)
bufferedReader.close();
if (null != preparedStatement)
preparedStatement.close();
if (null != connection)
connection.close();
}
}

// 使用JDBC查询大文本
public void query_text() throws SQLException, IOException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
connection = getConnection();

preparedStatement = connection
.prepareStatement("SELECT id,resume FROM testclob WHERE id = ?");

preparedStatement.setString(1, id);

resultSet = preparedStatement.executeQuery();

while (true == resultSet.next()) {
BufferedReader bufferedReader = null;
BufferedWriter bufferedWriter = null;
try {
bufferedReader = new BufferedReader(
resultSet.getCharacterStream("resume"));
bufferedWriter = new BufferedWriter(
new FileWriter(
"src/main/java/cn/com/songjy/test/db/MySQLText.txt"));
char[] buffer = new char[512];// 每次读取512个字符

for (int len = 0; (len = bufferedReader.read(buffer)) > 0;) {
bufferedWriter.write(buffer, 0, len);
}
} finally {
if (null != bufferedWriter)
bufferedWriter.close();
if (null != bufferedReader)
bufferedReader.close();
}
}

} finally {

if (null != resultSet)
resultSet.close();

if (null != preparedStatement)
preparedStatement.close();

if (null != connection)
connection.close();
}
}

// JDBC保存二进制数据
public void save_binary_stream() throws SQLException, IOException {
Connection connection = null;
PreparedStatement preparedStatement = null;
BufferedInputStream bufferedInputStream = null;

try {

File jpg = new File(
"src/main/java/cn/com/songjy/test/db/Jellyfish.jpg");

bufferedInputStream = new BufferedInputStream(new FileInputStream(
jpg));

connection = getConnection();

preparedStatement = connection
.prepareStatement("INSERT INTO testblob(id, image) VALUES (?,?)");

preparedStatement.setString(1, id);
// preparedStatement.setBinaryStream(2, inputStream, jpg.length());
preparedStatement.setBinaryStream(2, bufferedInputStream);

log.info(preparedStatement.executeUpdate() > 0 ? "图片保存成功"
: "图片保存失败");

} finally {
if (null != bufferedInputStream)
bufferedInputStream.close();// 记得关闭,否则可能导致该文件占用而影响其它操纵(删除等),可参阅//http://www.coder.xxx/archives/32.html

if (null != preparedStatement)
preparedStatement.close();

if (null != connection)
connection.close();
}
}

// JDBC查询二进制数据
public void query_binary_stream() throws SQLException, IOException {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;

try {
connection = getConnection();
preparedStatement = connection
.prepareStatement("SELECT id, image FROM testblob WHERE id = ?");

preparedStatement.setString(1, id);

resultSet = preparedStatement.executeQuery();

while (true == resultSet.next()) {
BufferedOutputStream bufferedOutputStream = null;
BufferedInputStream bufferedInputStream = null;
try {
bufferedInputStream = new BufferedInputStream(
resultSet.getBinaryStream("image"));

bufferedOutputStream = new BufferedOutputStream(
new FileOutputStream(
"src/main/java/cn/com/songjy/test/db/1.jpg"));

byte[] buffer = new byte[1024];// 每次读取1k

for (int len = 0; (len = bufferedInputStream.read(buffer)) > 0;) {
bufferedOutputStream.write(buffer, 0, len);
// bufferedOutputStream.flush();//关闭的时候会自动将缓存中的数据写入文件
}
} finally {
if (null != bufferedOutputStream)
bufferedOutputStream.close();
if (null != bufferedInputStream)
bufferedInputStream.close();

}
}

} finally {

if (null != resultSet)
resultSet.close();

if (null != preparedStatement)
preparedStatement.close();

if (null != connection)
connection.close();
}
}

public static void main(String[] args) throws SQLException, IOException {
// new MySQLText().save_text();
// new MySQLText().query_text();
// new MySQLText().save_binary_stream();
new MySQLText().query_binary_stream();
}
}

/*
*
* create table testclob
*
* (
*
* id varchar(40) primary key,
*
* resume text
*
* );
*
* create table testblob
*
* (
*
* id varchar(40) primary key,
*
* image MediumBlob
*
* );
*/


备注:保存二进制文件时注意选择类型,详见[url=http://www.jb51.net/article/29686.htm]mysql blob大小配置介绍[/url]

[img]http://dl2.iteye.com/upload/attachment/0090/3757/6913dc02-e1c4-3a48-83ef-c76ed85f552d.png[/img]

[url=http://songjianyong.iteye.com/blog/812961]oracle存取二进制文件(图片)[/url]

[url=http://even2012.iteye.com/blog/1886950]JDBC 学习笔记(二)—— 大数据+存储过程+批处理+事务管理[/url]

可能会遇到的问题:[url=http://songjianyong.iteye.com/blog/1961770]com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException[/url]

[url=http://nnwq.iteye.com/blog/1970460]Java读文件的一些归纳总结[/url]

[url=http://www.coder.xxx/archives/32.html]InputStream未关闭导致文件被占用从而引发的问题[/url]

[url=http://wenku.baidu.com/link?url=k0MmHZnjG35CLufi-A76us2Zpq5UVS7lChx6md9Ov1g04L_M4gc9-NJwu6ArcF7w31M012RA9aibqg9IQdWGB1hawwNWqg0TwkO1pYLORM7]BufferedInputStream与BufferedOutputStream的使用[/url]
	public void resource() throws IOException {

Resource resource = new UrlResource(
"http://127.0.0.1:8008/monitor/file/navicat8_mysql_cs.exe");

System.out.println(resource.getFilename());

File f = new File(resource.getFilename());

System.out.println(f.length());

InputStream src_in = resource.getInputStream();

BufferedInputStream in = new BufferedInputStream(src_in);

byte[] temp = new byte[1024];

BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(f));

while (-1 != (in.read(temp))) {
out.write(temp);
}

out.flush();

out.close();
in.close();
src_in.close();

System.out.println(f.length());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值