sql 2k中的圖片儲存和獲取----引申到檔案儲存和獲取 (轉)
當大家想完成一個任務的時候,首先是考慮怎麼設計,(會說到軟工就離題了)。實現的時候肯定是想複用現成的程式碼,或者找個相似的來參考。看到一些關於文章留下不少程式碼,就是論壇也有不少人高分求程式碼(不會是急功近利吧)。所以偶就把自己常常寫得比較典型有用的程式碼給大家貼出來,供大家參考,水平有限,希望多提意見,咔咔
這次是圖片的儲存,在 2k裡面圖片一般存為image或者varbinary型別,操作的時候沒有弄過的感覺很迷茫,已經會的了就很簡單。透過自己的體會,感覺透過位元組陣列來儲存是最方便的,也是比較不容易出錯的。透過流的方式,總會出一些問題。在獲取圖片或者時,兩者都是比較穩定的,無論是用的jc還是使用odbc橋。
/*
* Created on -5-13
*
* To change the template for this generated file go to
* Window>Preferences>>Code Generation>Code and Comments
*/
package scut.ailab.sql2ktools;
/**
* @author youyongming
* 針對欄位的image和varbinary的存取
*/
import java.sql.*;
import java.io.*;
import java.nio.*;
public class ImageOperation {
義資料庫連線
private Connection conn;
/**
* 使用指定的連線構造
* @param conn 資料庫連線
*/
public ImageOperation(Connection conn)
{
this.conn = conn;
if (this.conn == null)//如果沒有初始化連線,預設初始化
initConn();
}
/**
* 預設的資料庫連線
* 當構造的conn為null時,做演示用
*/
private void initConn()
{
String user = "DevTeam";
String pass = "DevTeam";
String str = "sun.jdbc.odbc.JdbcOdbcDriver";
String url = "jdbc:odbc:chinascutface";
try{
Class.forName(driverstr).newInstance();
conn = DriverManager.getConnection(url,user,password);
}
catch(Exception e)
{
e.printStackTrace();
}
}
/**
* 儲存影像檔案到資料庫指定的位置
* @param sqlstr 指定位置的sql語句
* @param file 指定影像檔案
* @return 儲存成功返回true,否則返回false
*/
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)
{
(array, offset, length);
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();
}
果發生檔案讀寫錯誤都會返回false
return false;
}
/**
* 儲存位元組陣列到資料庫指定位置
* @param sqlstr 描述位置的sql語句
* @param in 要儲存的位元組陣列
* @return 返回是否成功儲存
*/
private boolean setImage(String sqlstr, byte[] in)
{
boolean flag = false;
if (sqlstr == null)
sqlstr = " img from image_table";
try{
Statement stmt = conn.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery(sqlstr);
if (rs.next())
{
rs.updateBytes(1, in);
rs.updateRow();
}
rs.close();
flag = true;
}
catch(Exception e)
{
e.printStackTrace();
}
return flag;
}
/**
* 從資料庫指定位置獲取影像檔案
* @param sqlstr 描述資料庫位置的sql語句
* @param file 影像檔案儲存路徑
* @return 是否正確返回檔案
*/
public boolean retrieveImage(String sqlstr, File file)
{
boolean flag = false;
if (sqlstr == null)
sqlstr = "select img from image_table";
try {
Statement stat = conn.createStatement();
ResultSet rs=stat.executeQuery(sqlstr);
while (rs.next())
{
byte[] content = rs.getBytes(1);
if (!rs.wasNull())//找到資料
{
flag = true;
存到指定檔案
FileOutputStream fout= new FileOutputStream(file);
fout.write(content);;
fout.flush();
fout.close();
}
存第一條紀錄,跳出
break;
}
閉連線
rs.close();
stat.close();
}
catch (SQLException sqle) {
sqle.printStackTrace() ;
}
catch(Exception e)
{
e.printStackTrace();
flag = false;//如果有io錯誤則不成功
}
return flag;
}
試
public static void main(String[] args)
{
ImageOperation iop = new ImageOperation(null);
try{//使用一個圖片作為測試檔案
File file = new File("wodao.gif");
if (iop.storeImage(null, file))
System.out.print("true");
else
System.out.print("false");
file = new File("new.gif");
if (iop.retrieveImage(null, file))
System.out.print("true");
else
System.out.print("false");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-956600/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Excel 讀取圖片並獲取儲存路徑Excel
- 如何獲取HDFS上檔案的儲存位置
- java mysql儲存和讀取檔案JavaMySql
- php獲取遠端網站圖片並儲存本地PHP網站
- redis叢集資料儲存和獲取原理Redis
- 在SQL Server中儲存和輸出圖片 (轉)SQLServer
- (slam工具)1檔案讀取和儲存SLAM
- Matlab - 獲取和儲存檔案路徑選擇對話方塊Matlab
- iOS儲存網路圖片和讀取本地沙盒圖片iOS
- shell中獲取儲存過程返回值儲存過程
- python讀取檔案——python讀取和儲存mat檔案Python
- Photos儲存、獲取、更改照片詳解
- SQL SERVER 儲存過程 獲取三個數中的最大值SQLServer儲存過程
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- C#中從Clipboard儲存獲取資料的方法C#
- Android內部儲存和外部儲存,以及讀取Android讀取RAM,ROM內部儲存和外部儲存卡容量Android
- opencv python 從攝像頭獲取視訊/從檔案獲取視訊 /儲存視訊OpenCVPython
- 讀取和儲存Excel表Excel
- Python -讀取,儲存檔案Python
- GreenPlum 獲取表儲存大小的方法推薦
- 儲存過程獲取表被引用的資訊儲存過程
- SQL Server中對圖片進行儲存和輸出SQLServer
- 獲取在oracleasmlib上hds儲存的多路徑OracleASM
- PostgreSQL獲取建表語句儲存過程SQL儲存過程
- 立體視覺影象對,獲取與儲存視覺
- Android儲存讀取txt檔案Android
- 將圖片檔案儲存到Oracle的儲存過程Oracle儲存過程
- 儲存圖片到SD卡SD卡
- ASP儲存遠端圖片檔案到原生程式碼
- 獲取jwt(json web token)中儲存的使用者資訊JWTJSONWeb
- 塊儲存 檔案儲存 物件儲存物件
- 【轉】mysql儲存圖片技術決定:儲存二進位制檔案還是隻儲存圖片相對路徑,圖片放在硬碟上面?MySql硬碟
- Java——獲取圖片尺寸和大小Java
- 儲存圖片
- 儲存檔案到本地
- 每天定時獲取必應每日一圖並儲存做桌布
- 獲取微信小程式二維碼並且儲存微信小程式
- 獲取某庫某個儲存過程內容儲存過程