将图片存入数据库和下载到本地
2013-11-11 21:20
190 查看
存入:成功将一张图片文件存入数据库
import java.sql.*;
import java.io.*;
public class Imagedata{
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");//加载驱动
Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.24.75:3306/photoserver?useUnicode=true&characterEncoding=utf-8","root","123");//建立数据库链接
File file=new File("mark.png");//指定入库的文件
FileInputStream fis=new FileInputStream(file);//创建输入流对象这里可以将fis想象成一个管道 这个管道架在file中存的路径所对应的图片上 将这个图片化成的二进制数据装入管道fis
PreparedStatement ps=conn.prepareStatement("insert into photo18 values(?,?)"); //通过实例对象cn将SQL语句存入 PS中带入SQL数据库中
ps.setBinaryStream(1,fis,(int)file.length());
ps.setString(2,file.getName());
ps.executeUpdate();//执行该数据库语句最终将图片分解成二进制数据放入表中的PHOTO字段
System.out.println("图片入库成功");
ps.close();
fis.close();
conn.close();
}catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
/**建库信息**/
/*create database 表名 ;
/**建表信息**/
/*
use 表名;
create table image(image longblob,name char(30));
*/
读取:
public class Test {
static String dbURL = "jdbc:mysql://localhost:3306/photoserver";
static String userID = "root";
static String passwd = "123";
public static void main(String[] args)throws Exception {
File f = new File(".\\"+File.separator+"photo") ;// 实例化File类的对象
f.mkdir() ; // 创建文件夹
Class.forName("com.mysql.jdbc.Driver");
Connection conn=(Connection) DriverManager.getConnection(dbURL, userID, passwd);
conn.setAutoCommit(false);
String sql2 = "SELECT image,name FROM image ";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
ResultSet resultSet = stmt2.executeQuery();
while (resultSet.next()) {
String name = resultSet.getString(2);
String description = resultSet.getString(1);
File image2 = new File("photo/" + name);
FileOutputStream fos = new FileOutputStream(image2);
byte[] buffer = new byte[1];
InputStream is = resultSet.getBinaryStream(1); /*read(byte[] b),从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。write(byte[] b),
将 b.length 个字节从指定的 byte 数组写入此输出流。 */
System.out.println("成功将:"+name+":写入指定文件夹下");
while (is.read(buffer) > 0) {
fos.write(buffer);
}
fos.close();
}
conn.close();
}
}
/**建库信息**/
/*create database 表名 ;
/**建表信息**/
/*
use 表名;
create table image(image longblob,name char(30));
*/
import java.sql.*;
import java.io.*;
public class Imagedata{
public static void main(String[] args) {
try {
Class.forName("com.mysql.jdbc.Driver");//加载驱动
Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.24.75:3306/photoserver?useUnicode=true&characterEncoding=utf-8","root","123");//建立数据库链接
File file=new File("mark.png");//指定入库的文件
FileInputStream fis=new FileInputStream(file);//创建输入流对象这里可以将fis想象成一个管道 这个管道架在file中存的路径所对应的图片上 将这个图片化成的二进制数据装入管道fis
PreparedStatement ps=conn.prepareStatement("insert into photo18 values(?,?)"); //通过实例对象cn将SQL语句存入 PS中带入SQL数据库中
ps.setBinaryStream(1,fis,(int)file.length());
ps.setString(2,file.getName());
ps.executeUpdate();//执行该数据库语句最终将图片分解成二进制数据放入表中的PHOTO字段
System.out.println("图片入库成功");
ps.close();
fis.close();
conn.close();
}catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
/**建库信息**/
/*create database 表名 ;
/**建表信息**/
/*
use 表名;
create table image(image longblob,name char(30));
*/
读取:
public class Test {
static String dbURL = "jdbc:mysql://localhost:3306/photoserver";
static String userID = "root";
static String passwd = "123";
public static void main(String[] args)throws Exception {
File f = new File(".\\"+File.separator+"photo") ;// 实例化File类的对象
f.mkdir() ; // 创建文件夹
Class.forName("com.mysql.jdbc.Driver");
Connection conn=(Connection) DriverManager.getConnection(dbURL, userID, passwd);
conn.setAutoCommit(false);
String sql2 = "SELECT image,name FROM image ";
PreparedStatement stmt2 = conn.prepareStatement(sql2);
ResultSet resultSet = stmt2.executeQuery();
while (resultSet.next()) {
String name = resultSet.getString(2);
String description = resultSet.getString(1);
File image2 = new File("photo/" + name);
FileOutputStream fos = new FileOutputStream(image2);
byte[] buffer = new byte[1];
InputStream is = resultSet.getBinaryStream(1); /*read(byte[] b),从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b 中。write(byte[] b),
将 b.length 个字节从指定的 byte 数组写入此输出流。 */
System.out.println("成功将:"+name+":写入指定文件夹下");
while (is.read(buffer) > 0) {
fos.write(buffer);
}
fos.close();
}
conn.close();
}
}
/**建库信息**/
/*create database 表名 ;
/**建表信息**/
/*
use 表名;
create table image(image longblob,name char(30));
*/
相关文章推荐
- Oracle中几种查看缓冲器大小的方法
- Oracle创建删除用户、角色、表空间、导入导出、...命令总结
- Oracle ASM 概念、配置及常用管理命令详解
- sysbench的安装和做性能测试
- 【Oracle】Oracle数据字典
- 聚石塔中查询数据库是否有锁
- redis数据库
- SQL命令查询Oracle存储过程信息(代码内容等)
- oracle共享池
- 12、Hibernate内存查询与数据库查询
- 用sqlserver 实现带英文字母的流水码
- Oracle 性能相关常用脚本(SQL)
- 海量数据库及分区4——《12年资深DBA教你Oracle开发与优化——性能优化部分》
- mysql 字段名字包含空格引发的问题
- 13 usage of mysql
- Sql server 中关闭自增字段
- sqlite3函数小结
- 图解SQL的Join
- SQL语句的增删改查(详细)
- MySQL生僻字(不常用字)的完整解决方案