您的位置:首页 > 编程语言 > Java开发

用Java 将图片存入Mysql 并读出的方法

2014-09-18 16:23 330 查看
首先说明一点,此篇来自网络自我感觉这么做是很垃圾的,傻呀,把图片放到数据库中,一般只是存放地址。

我们要做的是将一张图片存入Mysql中,在Mysql中用Blob 来存储图片和音频等大的数据项.Blob 按其容量可分为四种,分别为:tinyblob,blob ,mediumblob, longblob.他们的大小分别为:256B,64KB,16MB,4GB.除了容量不同外,这四种的用法一个样.我们这次将用Blob. 首先首先来创建我们的数据库,create database Image;use Image;create table country (id int primary key auto_increment,name varchar(30),flag blob,description varchar(255));数据库创建完毕,下面是Java 的程序代码,它实现的功能是从一个目录中读入一张图片(china.gif) ,然后在把它输出在另一个目录中(1.gif).*****************************************************************************************************import java.sql.*;
import java.io.*;/**author@tongxiaotime:2007.09.14*/public class TestImage {
private static final String URL = "jdbc:mysql://localhost/Image?user=root&password=root&useUnicode=true";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private File file = null;
private InputStream inputImage = null;
private OutputStream outputImage = null;public void blobInsert(String infile) {
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loaded!"); conn = DriverManager.getConnection(URL);
System.out.println("Database connected!"); pstmt = conn
.prepareStatement("insert into Country (name,flag,description) values (?,?,?)");
pstmt.setString(1, "china"); file = new File(infile);
try {
inputImage = new FileInputStream(file);
} catch (FileNotFoundException e) { e.printStackTrace();
}
pstmt.setBinaryStream(2, inputImage, (int) (file.length())); pstmt.setString(3, "A flag of China");
pstmt.executeUpdate();
System.out.println("commit successfully");
} catch (ClassNotFoundException e) { e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
inputImage.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}}public void readBolb(String path, int id) {
InputStream is = null;
byte[] buffer = new byte[4096]; try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("Driver loaded!"); conn = DriverManager.getConnection(URL);
System.out.println("Database connected!"); pstmt = conn
.prepareStatement("select flag from Country where id =?");
System.out.println("select ok"); pstmt.setInt(1, id);
rs = pstmt.executeQuery(); rs.next();
file = new File(path);
if (!file.exists()) {
try {
file.createNewFile();
} catch (IOException e) { e.printStackTrace();
} }
try {
outputImage = new FileOutputStream(file);
System.out.println(outputImage.toString());
} catch (FileNotFoundException e) { e.printStackTrace();
} Blob blob = rs.getBlob("flag");
is = blob.getBinaryStream();
try {
System.out.println(is.available());
} catch (IOException e2) {

e2.printStackTrace();
}
try {
System.out.println(is.available());
} catch (IOException e1) { e1.printStackTrace();
} int size = 0;
try {
while ((size = is.read(buffer)) != -1) {
System.out.println(size);
outputImage.write(buffer, 0, size); }
} catch (IOException e) { e.printStackTrace();
} } catch (ClassNotFoundException e) { e.printStackTrace();
} catch (SQLException e) { e.printStackTrace();
} finally {
try {
is.close();
outputImage.close();
pstmt.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}}public static void main(String[] args) { new TestImage().blobInsert("c:\\TDdownload\\china.gif");
new TestImage().readBolb("c:\\1.gif", 1);
}}程序执行完你将在相应的目录下看到一张输出的图片.同时在Mysql 客户端使用:select * from country;将显示一堆的乱麻,这就正常.说明图片已经存入Mysql 中.到次本次试验完毕!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: