通过java或jsp想数据库存取二进制图片(精)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1 MySQL存储大容量的二进制文件的格式是 blob ,其实除了图片还可以存别的
2 要向数据库存储二进制的文件一定要把要存储的数据转换成二进制流
废话就不多说了, 大家看看代码很容易明白, 先来看一个 app 程序, 当然首先您要在数据库中先建立一个用于保存图片的表和相应的列,数据格式为 blob
package com.lizhe;
import Java.io.*;
import java.sql.*;
public class PutImg {
public void putimg( {
try {
Class.forName("org.gjt.mm.mysql.Driver".newInstance(;
String url =
"JDBC:mysql://localhost/img?user=root&password=root&useUnicode=true&characterE ncoding= gbk";
Connection conn = DriverManager.getConnection(url;
Statement stmt = conn.createStatement(;
//stmt.execute("insert into imgt (id values (5";
stmt.close(;
PreparedStatement pstmt = null;
String sql = "";
File file = new File("c: log.jpg";
InputStream photoStream = new FileInputStream(file; //sql = " UPDATE imgt SET img = ? ";
sql = "INSERT INTO imgtable (img VALUES (?"; pstmt = conn.prepareStatement(sql;
pstmt.setBinaryStream(1, photoStream, (int file.length(; pstmt.executeUpdate(;
pstmt.close(;
conn.close(;
} catch (Exception e {
e.printStackTrace(;
}
}
public static void main(String args[]{
PutImg pi=new PutImg(;
pi.putimg(;
}
}
InputStream photoStream = new FileInputStream(file;
可以很清楚的看到我们首先把一个图片文件 (当然也可以是别的什么文件转换成了一个二进制输入流
pstmt.setBinaryStream(1, photoStream, (int file.length(;
这个方法建议大家去查一下 API 文档 , 第一个参数是通配符位置没的说 , 第二个参数是流 , 这和以往的 string 类型的参数不太一样 , 我刚看到的时候也觉得豁然开朗了 , 但是到这里还没完 , 不同于以往的字符串参数 , 这里我们还需要第三个参数来设置这个流的长度 , 这里也就是这个文件的长度 , 导出数据库中的 sql, 一切都清楚了
INSERT INTO `m_diy` V ALUES (2,? JFIF HH?? ExifMM* b j ( 1 r 2 ?i H H Adobe Photoshop CS Windows2007:03:18 23:08:15 ? ??? ? ........等等
其实就是将文件先转换成了二进制的流 , 然后插入到了 sql 语言中 , 向数据库写入了很长很长的一段 sql 语句
然后我们再来写一个 app 程序将这个文件读出来 , 存储成一个图片文件
package com.lizhe;
import Java.io.*;
import java.sql.*;
class GetImg {
private static final String URL =
"JDBC:MySQL://localhost/img?user=root&password
=root&useUnicode=true&characterEncoding=gbk";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private File file = null;
public void blobRead(String outfile, int picID throws Exception { FileOutputStream fos = null;
InputStream is = null;
byte[] Buffer = new byte[4096];
try {
Class.forName("org.gjt.mm.mysql.Driver".newInstance(;
conn = DriverManager.getConnection(URL;
pstmt = conn.prepareStatement("select img from imgt where id=?"; pstmt.setInt(1, picID; // 传入要取的图片的 ID
rs = pstmt.executeQuery(;
rs.next(;
file = new File(outfile;
if (!file.exists( {
file.createNewFile(; // 如果文件不存在,则创建
}
fos = new FileOutputStream(file;
is = rs.getBinaryStream("img";