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

java操作mysql存储读取图片

2015-07-01 17:51 537 查看
为了使用JSP灵活 需要把各种文件储存在数据库中 然后需要的时候将它读取出来显示到客户端 这些文件包括文本 图片 音乐等 人们统称为二进制文件 :: 二进制文件储存在数据库中的过程是 打开文件 将内容读到缓存区 然后直接连接创建JDBC语句对象
使用该缓冲区的数据 并执行更新 就完成了储存

1 在mysql中创建一个表picture_db

create table picture_db(

file_name varchar(255) not null,

content longblob,

primary key (file_name));

2 java 写储存文件的代码

import java.sql.*;

import java.io.*;

import java.nio.*;

public class UploadImage {

protected Connection dbConnection;

protected String driverName = "com.mysql.jdbc.Driver";

protected String dbURL = "jdbc:mysql://localhost:3306/sample_db";

protected String userID = "root";

protected String passwd = "yourpassword";

public boolean storeImage(String sqlstr,File file){

try{

FileInputStream fin = new FileInputStream(file);

ByteBuffer nbf = ByteBuffer.allocate((int)file.length());

byte[] array = new byte[1024];

int offset =0,length=0;

while((length=fin.read(array))>0){

if(length!=1024)

nbf.put(array,0,length);

else

nbf.put(array);

offset+=length;

}

fin.close();

byte[] content = nbf.array();

return setImage(sqlstr,content);

}catch(FileNotFoundException e){

e.printStackTrace();

}catch (IOException e){

e.printStackTrace();

}

return false;

}

private boolean setImage(String sqlstr,byte[] in){

boolean flag = false;

if(sqlstr==null)

sqlstr="select * from picture_db";

try{

Class.forName(driverName);

dbConnection = DriverManager.getConnection(dbURL,userID,passwd);

Statement stmt = dbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet rs = stmt.executeQuery(sqlstr);

if(rs.next()){

rs.updateBytes(2,in);

rs.updateRow();

}

else{

rs.moveToInsertRow();

rs.updateString(1,"01");

rs.updateBytes(2,in);

rs.insertRow();

}

rs.close();

flag=true;

}catch(Exception e){

e.printStackTrace();

}

return flag;

}

public static void main(String[] args){

UploadImage upload = new UploadImage();

try{

File file = new File("01.jpg");

if(upload.storeImage(null, file))

System.out.print("ture");

else

System.out.print("False");

}catch(Exception e){

e.printStackTrace();

}

}

}

如果执行成功的话 系统打印 true 否则 false

3 就是将图片读取出来 与储存的过程相反 先建立连接 创建数据库查询JDBC对象 使用该语句来返回二进制结果 保存到文件中

<%@ page contentType = "image/jpeg;charset=GB2312"%>

<%@ page import="java.sql.*"%><%@ page import="java.io.*"%>

<%@ page import="com.sun.image.codec.jpeg.*"%>

<%@ page import="javax.imageio.*"%>

<%@ page import="java.awt.image.*"%><html>

<head>

<meta http-equiv="Content-Type" content="image/jpeg;charset=GB2312">

<title>showDBImage</title>

</head>

<body>

<%

String showImage ="select * from picture_db where file_name ='01'";

Connection conn = null;

BufferedInputStream inputImage = null;String driverName = "com.mysql.jdbc.Driver";

String dbURL = "jdbc:mysql://localhost:3306/sample_db";

String userID = "root";

String passwd = "yourpassword";try{

Class.forName(driverName).newInstance();

conn = DriverManager.getConnection(dbURL,userID,passwd); Statement
st = conn.createStatement();

ResultSet rs = st.executeQuery(showImage);

while(rs.next()){

Blob blob = (Blob)rs.getBlob("content");

inputImage = new BufferedInputStream(blob.getBinaryStream());

} BufferedImage image = null;

image = ImageIO.read(inputImage);

ServletOutputStream sos = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);

encoder.encode(image);

inputImage.close();

}catch(SQLException e)

{

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}

%>

</body>

</html>

为了使用JSP灵活 需要把各种文件储存在数据库中 然后需要的时候将它读取出来显示到客户端 这些文件包括文本 图片 音乐等 人们统称为二进制文件 :: 二进制文件储存在数据库中的过程是 打开文件 将内容读到缓存区 然后直接连接创建JDBC语句对象
使用该缓冲区的数据 并执行更新 就完成了储存

1 在mysql中创建一个表picture_db

create table picture_db(

file_name varchar(255) not null,

content longblob,

primary key (file_name));

2 java 写储存文件的代码

import java.sql.*;

import java.io.*;

import java.nio.*;

public class UploadImage {

protected Connection dbConnection;

protected String driverName = "com.mysql.jdbc.Driver";

protected String dbURL = "jdbc:mysql://localhost:3306/sample_db";

protected String userID = "root";

protected String passwd = "yourpassword";

public boolean storeImage(String sqlstr,File file){

try{

FileInputStream fin = new FileInputStream(file);

ByteBuffer nbf = ByteBuffer.allocate((int)file.length());

byte[] array = new byte[1024];

int offset =0,length=0;

while((length=fin.read(array))>0){

if(length!=1024)

nbf.put(array,0,length);

else

nbf.put(array);

offset+=length;

}

fin.close();

byte[] content = nbf.array();

return setImage(sqlstr,content);

}catch(FileNotFoundException e){

e.printStackTrace();

}catch (IOException e){

e.printStackTrace();

}

return false;

}

private boolean setImage(String sqlstr,byte[] in){

boolean flag = false;

if(sqlstr==null)

sqlstr="select * from picture_db";

try{

Class.forName(driverName);

dbConnection = DriverManager.getConnection(dbURL,userID,passwd);

Statement stmt = dbConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet rs = stmt.executeQuery(sqlstr);

if(rs.next()){

rs.updateBytes(2,in);

rs.updateRow();

}

else{

rs.moveToInsertRow();

rs.updateString(1,"01");

rs.updateBytes(2,in);

rs.insertRow();

}

rs.close();

flag=true;

}catch(Exception e){

e.printStackTrace();

}

return flag;

}

public static void main(String[] args){

UploadImage upload = new UploadImage();

try{

File file = new File("01.jpg");

if(upload.storeImage(null, file))

System.out.print("ture");

else

System.out.print("False");

}catch(Exception e){

e.printStackTrace();

}

}

}

如果执行成功的话 系统打印 true 否则 false

3 就是将图片读取出来 与储存的过程相反 先建立连接 创建数据库查询JDBC对象 使用该语句来返回二进制结果 保存到文件中

<%@ page contentType = "image/jpeg;charset=GB2312"%>

<%@ page import="java.sql.*"%><%@ page import="java.io.*"%>

<%@ page import="com.sun.image.codec.jpeg.*"%>

<%@ page import="javax.imageio.*"%>

<%@ page import="java.awt.image.*"%><html>

<head>

<meta http-equiv="Content-Type" content="image/jpeg;charset=GB2312">

<title>showDBImage</title>

</head>

<body>

<%

String showImage ="select * from picture_db where file_name ='01'";

Connection conn = null;

BufferedInputStream inputImage = null;String driverName = "com.mysql.jdbc.Driver";

String dbURL = "jdbc:mysql://localhost:3306/sample_db";

String userID = "root";

String passwd = "yourpassword";try{

Class.forName(driverName).newInstance();

conn = DriverManager.getConnection(dbURL,userID,passwd); Statement
st = conn.createStatement();

ResultSet rs = st.executeQuery(showImage);

while(rs.next()){

Blob blob = (Blob)rs.getBlob("content");

inputImage = new BufferedInputStream(blob.getBinaryStream());

} BufferedImage image = null;

image = ImageIO.read(inputImage);

ServletOutputStream sos = response.getOutputStream();

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(sos);

encoder.encode(image);

inputImage.close();

}catch(SQLException e)

{

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}

%>

</body>

</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: