您的位置:首页 > 数据库

利用数据库如何存入BLOB格式图片,并从数据库中取出BLBO格式图片显示出来

2014-05-16 10:21 627 查看


利用数据库如何存入BLOB格式图片,并从数据库中取出BLBO格式图片显示出来

这两天需要在图片存储性能方面做一些实验,无非就是两种方法,一是将图片以BLOB格式存入数据库中,二是将图片路径存入数据库中,然后从数据库中提取出来。

实验数据是从1000张图片中遍历取出100张,先导入1000张图片进入数据库,然后从数据库导出到本地。样本比较小哈。。。。 下面贴出代码
package DmTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DmTest {
	//定义 DM JDBC 驱动串
	String jdbcString = "dm.jdbc.driver.DmDriver";
	//定义 DM URL 连接串
	String urlString = "jdbc:dm://localhost:5236/";
	//定义连接用户名
	String userName = "SYSDBA";
	//定义连接用户口令
	String password = "SYSDBA";
	static //定义sql语句
	//String sqlString ="create table yujin3(a int,b int,c int);";
	String sqlString1="insert into yujin3  values(123,14,1234);";
	//定义连接对象
	static Connection conn = null;
	
	
	static Statement stmt = null;   
	static PreparedStatement ps = null;   
	static ResultSet rs = null;  
	
	
	//private static String sqlString1;
	/* 加载 JDBC 驱动程序
	* @throws SQLException 异常 */

	public void loadJdbcDriver() throws SQLException {
		try {
			System.out.println("Loading JDBC Driver...");
	//加载 JDBC 驱动程序
	//DriverManager.registerDriver(new dm.jdbc.driver.DmDriver()); 
			Class.forName(jdbcString);
		} catch (ClassNotFoundException e) {
			throw new SQLException("Load JDBC Driver Error1: " + e.getMessage());
		} catch (Exception ex) {
			throw new SQLException("Load JDBC Driver Error : "+ ex.getMessage());
		}
	}
	
	public void connect() throws SQLException {
		try {
				System.out.println("Connecting to DM Server...");
				//连接 DM 数据库
				conn = DriverManager.getConnection(urlString, userName, password);
			} catch (SQLException e) {
					throw new SQLException("Connect to DM Server Error : "+ e.getMessage());
			}
	}
	
	/* 关闭连接
	* @throws SQLException 异常 */
	
	public void disConnect() throws SQLException {
		try {
			//关闭连接
			conn.close();
			System.out.println("close");
		} catch (SQLException e) {
			throw new SQLException("close connection error : " + e.getMessage());
		}
	}
	
	public static void main(String args[]) throws IOException, SQLException {
	
		DmTest basicApp = new DmTest();
		// 加载驱动程序
		basicApp.loadJdbcDriver();
		
		basicApp.connect();
		
	
	    //创建表   
	     String sql = "CREATE TABLE blobtest(" +      
	       "b_title int,"+   
	       "b_text Blob"+    
	       ")";   
	   System.out.println(sql);  
	   
	
	   stmt = conn.createStatement(); 
	   stmt.executeUpdate(sql);   
	   System.out.println("创建数据表成功!");   
	      
	   sql="INSERT INTO blobtest(b_title,b_text)VALUES(?,?)";   
	   ps = conn.prepareStatement(sql);   
	   
	   //插入图片   ,将图片先编程byte数组,然后存入blob字段中
	
	   for(int i=0;i<=999;i++)
	   {
	  	 String s="c:\\images\\"+i+".jpg";
	  	 File file = new File(s);   
	  	 InputStream inputStream = new FileInputStream(file);   
	  
	
	       ps.setInt(1, i);   
	       //新建一byte数组   
	       byte[] buf=new byte[inputStream.available()];   
	       //将文件读入到byte[]中   
	       inputStream.read(buf);   
	       ps.setBytes(2, buf);   
	       ps.executeUpdate();   
	       System.out.println("图片"+i+"插入成功!");   
	 
	   }
		 
	   //读取图片出来,保存到本地的磁盘上面
	   sql = "SELECT b_title,b_text FROM blobtest";   
	   ps = conn.prepareStatement(sql);   
	   rs = ps.executeQuery();   
	   while(rs.next()){   
	  	 if(rs.getInt(1)%10==0){
		         System.out.println("图片名: "+rs.getInt(1));    
		         Blob blob = rs.getBlob("b_text");   
		         String s1="c:\\imagett\\"+rs.getInt(1)+".jpg";
		         File file2 = new File(s1);   
		         OutputStream outputStream = new FileOutputStream(file2);   
		         try {   
		             outputStream.write(blob.getBytes(1,(int)blob.length()));   
		         } catch (IOException e) {   
		             e.printStackTrace();   
		         }   
		         //打印出来的为对象   
		         System.out.println("图片内容: "+ blob.getBinaryStream());  
	  	 }
	          
	   }   
	  
		basicApp.disConnect();
	
	      
	}   
}


数据库我使用的是国产达梦数据库,如果要改其他的话也比较简单。

然后在相应路径下面就生成了100张图片,速度还是比较快的,关于实验数据大家可以去网上下载,或者减少样本,一两张都可以,只是要稍微修改下代码就行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐