varchar型,存圖片的路徑,一般不直接存圖片,非要存的話用blob。
2. mysql存圖片麻煩嗎 用什麼欄位存
方法一:
把照片放進資料庫,照片的格式最好是bmp,這樣就可以在窗體上顯示出來,不過這樣資料庫的體積會暴增。
詳細的使用方法請參考Access幫助中的 PictureData 屬性(本文末尾有相關幫助)。
而且,你可以直接用 commdlg API 函數來給圖像框賦值,然後直接讀取某個圖像框的 PICTUREDATA 並存儲到某個 IMAGE 欄位中。這樣做的優點是顯示、讀取方便,缺點是如果圖片精度高,佔用的硬碟空間會爆大。
詳細示例請參考:
http://access911.net/down/eg/OLEfieldAndPictureData.rar
方法二:
設一個OLE欄位,然後插入對象就行了(對著欄位單擊右鍵)。但是要注意的是,用上述方法加入資料庫的圖片只能以手動方式保存,需要用程序讀取的時候會碰到存儲在ole欄位中二進制數據與源文件不符的情況。主要是因為ole引擎在圖片的前面加了一段信息給他自己用。
請參考:
http://access911.net/index.asp?board=4&mode=3&recordid=75FAB21E12DC
方法三:
將圖片文件以二進制方式存儲在資料庫中,使用時調用。詳細情況請參考:
使用 ADO 的 STREAM 對象的 LoadFromFile 方法以及 SaveToFile 方法實現:
http://access911.net/index.asp?board=4&mode=3&recordid=74FAB51E13DC
使用 ADO 的 RECORDSET.FIELD 對象的 GetChunk 以及 AppendChunk 方法實現:
http://access911.net/index.asp?board=4&mode=3&recordid=75FAB01E
ASP 中使用的方法:
http://access911.net/index.asp?board=4&mode=3&recordid=79FAB31E
下列常式就是採用這種方法,在顯示的時候把長二進制數據保存為臨時文件用於顯示
http://access911.net/down/photo.rar
方法四:
不把照片放入資料庫,只把照片的路徑保存到資料庫中,動態載入,這樣可以支持很多種圖片格式。作法是在窗體上放一個圖像控制項,然後根據員工編號或別的有關聯的欄位去找出路徑,用以下語句來載入圖像:
圖像1.Picture =路徑名
路徑名必須包括圖象文件名。
詳細情況你可以參考 access xp 的示例 northwind.mdb 中的雇員窗體
你也可以參考:http://access911.net/down/eg/LinkPicture.rar
3. mysql數據類型中blob和binary的區別
MySQL 數據類型細分下來,大概有以下幾類:
數值,典型代表為 tinyint,int,bigint
浮點/定點,典型代表為 float,double,decimal 以及相關的同義詞
字元串,典型代表為 char,varchar
時間日期,典型代表為 date,datetime,time,timestamp
二進制,典型代表為 binary,varbinary
位類型
枚舉類型
集合類型
大對象,比如 text,blob
json 文檔類型
一、數值類型(不是數據類型,別看錯了)如果用來存放整數,根據范圍的不同,選擇不同的類型。
注意:timestamp 代表的時間戳是一個 int32 存儲的整數,取值范圍為 '1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999';datetime 取值范圍為 '1000-01-01 00:00:00.000000' 到 '9999-12-31 23:59:59.999999'。
1. 如果時間有可能超過時間戳范圍,優先選擇 datetime。2. 如果需要單獨獲取年份值,比如按照年來分區,按照年來檢索等,最好在表中添加一個 year 類型來參與。3. 如果需要單獨獲取日期或者時間,最好是單獨存放,而不是簡單的用 datetime 或者 timestamp。後面檢索時,再加函數過濾,以免後期增加 SQL 編寫帶來額外消耗。
建立表 t5,對這些可能需要的欄位全部分離開,這樣以後寫 SQL 語句的時候就很容易了。
當然了,這種情形佔用額外的磁碟空間。如果想在易用性與空間佔用量大這兩點來折中,可以用 MySQL 的虛擬列來實時計算。比如假設 c5 欄位不存在,想要得到 c5 的結果。mysql-(ytt/3305)->alter table t5 drop c5, add c5 year generated always as (year(c1)) virtual;Query OK, 1 row affected (2.46 sec)Records: 1 Duplicates: 0 Warnings: 0
五、二進制類型
binary(10)/varbinary(10) 代表的不是字元個數,而是位元組數。
行結束符不一樣。char 的行結束符是 ,binary 的行結束符是 0x00。
由於是二進制存儲,所以字元編碼以及排序規則這類就直接無效了。
六、位類型
1. 對於 bit(8) 如果單純存放 1 位,左邊以 0 填充 00000001。2. 查詢時可以直接十進制來過濾數據。3. 如果此欄位加上索引,MySQL 不會自己做類型轉換,只能用二進制來過濾。
創建表 c1, 欄位性別定義一個比特位。mysql-(ytt/3305)->create table c1(gender bit(1));Query OK, 0 rows affected (0.02 sec)
mysql-(ytt/3305)->select cast(gender as unsigned) 'f1' from c1;+------+| f1 |+------+| 0 || 1 |+------+2 rows in set (0.00 sec)
過濾數據也一樣,二進制或者直接十進制都行。mysql-(ytt/3305)->select conv(gender,16,10) as gender -> from c1 where gender = b'1';+--------+| gender |+--------+| 1|+--------+1 row in set (0.00 sec)mysql-(ytt/3305)->select conv(gender,16,10) as gender -> from c1 where gender = '1';+--------+| gender |+--------+| 1|+--------+1 row in set (0.00 sec)
mysql-(ytt/3305)->create table c2(gender char(0));Query OK, 0 rows affected (0.03 sec)
mysql-(ytt/3305)->select count(*) from c1;+----------+| count(*) |+----------+| 33554432 |+----------+1 row in set (1.37 sec)
mysql-(ytt/3305)->insert into c2 select if(gender = 0,'',null) from c1;Query OK, 33554432 rows affected (2 min 18.80 sec)Records: 33554432 Duplicates: 0 Warnings: 0
兩張表的磁碟佔用差不多。root@ytt-pc:/var/lib/mysql/3305/ytt# ls -sihl總用量 1.9G4085684 933M -rw-r----- 1 mysql mysql 932M 12月 11 10:16 c1.ibd4082686 917M -rw-r----- 1 mysql mysql 916M 12月 11 10:22 c2.ibd
檢索方式稍微有些不同,不過效率也差不多。所以說,字元類型不愧為萬能類型。
七、枚舉類型
1. 最大佔用 2 Byte。2. 最大支持 65535 個不同元素。3. MySQL 後台存儲以下標的方式,也就是 tinyint 或者 smallint 的方式,下標從 1 開始。4. 排序時按照下標排序,而不是按照裡面元素的數據類型。所以這點要格外注意。
創建表 t7。mysql-(ytt/3305)->create table t7(c1 enum('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.03 sec)
1. 最大佔用 8 Byte,int64。2. 內部以二進制位的方式存儲,對應的下標如果以十進制來看,就分別為 1,2,4,8,...,pow(2,63)。3. 最大支持 64 個不同的元素,重復元素的插入,取出來直接去重。4. 元素之間可以組合插入,比如下標為 1 和 2 的可以一起插入,直接插入 3 即可。
mysql-(ytt/3305)->create table c7(c1 set('mysql','oracle','dble','postgresql','mongodb','redis','db2','sql server'));Query OK, 0 rows affected (0.02 sec)
mysql-(ytt/3305)->INSERT INTO c7WITH RECURSIVE ytt_number (cnt) AS ( SELECT 1 AS cnt UNION ALL SELECT cnt + 1 FROM ytt_number WHERE cnt < pow(2, 7) )SELECT *FROM ytt_number;Query OK, 128 rows affected (0.01 sec)Records: 128 Duplicates: 0 Warnings: 0
示例 10
mysql-(ytt/3305)->select ytt_sample_data_type(1111,222) 'result';+--------------------------+| result |+--------------------------+| The result is: '246642'. |+--------------------------+1 row in set (0.00 sec)

綜上所述,日期這塊類型的選擇遵循以下原則:
4. 如果有保存毫秒類似的需求,最好是用時間類型自己的特性,不要直接用字元類型來代替。MySQL 內部的類型轉換對資源額外的消耗也是需要考慮的。
示例 5
binary 和 varbinary 對應了 char 和 varchar 的二進制存儲,相關的特性都一樣。不同的有以下幾點:
示例 6
來看這個 binary 存取的簡單示例,還是之前的變數 @a。
切記!這里要提前計算好 @a 佔用的位元組數,以防存儲溢出。
bit 為 MySQL 里存儲比特位的類型,最大支持 64 比特位, 直接以二進制方式存儲,一般用來存儲狀態類的信息。比如,性別,真假等。具有以下特性:
示例 7
其實這樣的場景,也可以定義為 char(0),這也是類似於 bit 非常優化的一種用法。
那現在我給表 c1 簡單的造點測試數據。
把 c1 的數據全部插入 c2。
枚舉類型,也即 enum。適合提前規劃好了所有已經知道的值,且未來最好不要加新值的情形。枚舉類型有以下特性:
示例 8
八、集合類型
集合類型 SET 和枚舉類似,也是得提前知道有多少個元素。SET 有以下特點:
示例 9
定義表 c7 欄位 c1 為 set 類型,包含了 8 個值,也就是下表最大為 pow(2,7)。
插入 1 到 128 的所有組合。
九、數據類型在存儲函數中的用法
函數里除了顯式聲明的變數外,默認 session 變數的數據類型很弱,隨著給定值的不同隨意轉換。
定義一個函數,返回兩個給定參數的乘積。定義里有兩個變數,一個是 v_tmp 顯式定義為 int64,另外一個 @vresult 隨著給定值的類型隨意變換類型。
簡單調用下。
總結
本篇把 MySQL 基本的數據類型做了簡單的介紹,並且用了一些容易理解的示例來梳理這些類型。我們在實際場景中,建議選擇適合最合適的類型,不建議所有數據類型簡單的最大化原則。比如能用 varchar(100),不用 varchar(1000)。
4. MySql Blob圖片類型存儲Bug解決
先在本地裝了個Mysql,又裝了個navicat管理工具,又新建了個工程來測試:
簡單的測試方法,就是放一個按鈕,點擊一下,讀取遠程圖片,然後存到資料庫,再讀取出來顯示到界面上。
管理工具隨意建了個表“D1”,弄了三個id,img,name三個欄位。
示例代碼如下,因為測試,代碼就沒寫的太規范:
protected
void
btnTest_Click(object
sender,
EventArgs
e)
{
string
url
=
"http://www..com/img/_jgylogo3.gif";
bool
result
=
false;
int
id
=
0;
string
conn
=
"host=127.0.0.1;Port=3306;Database=test;uid=root;pwd=123456";
//
string
conn
=
"server=.;database=demo;uid=sa;pwd=123456";
using
(MAction
action
=
new
MAction("d1",
conn))
{
WebClient
wc
=
new
WebClient();
try
{
//if
(action.Fill(2))
//{
byte[]
data
=
wc.DownloadData(url);
action.Set("img",
data);
action.Set("name",
"ldf");
result
=
action.Insert(InsertOp.ID);
id
=
action.Get<int>("id");
//}
}
catch
(Exception
err)
{
Log.WriteLogToTxt(err);
}
}
if
(result)//再開一個讀取試試
{
using
(MAction
action
=
new
MAction("d1",
conn))
{
if
(action.Fill(id))
{
Response.BinaryWrite(action.Get<byte[]>("img"));
}
}
}
}
解決與調試經過:
經本地測試,調試,發現對blob類型的參數賦值時,拋出異常:索引超出了數組界限。
異常太迷惑,網上搜了一下,有人說是:Mysql.dll的版本問題,花了一個csdn積分下了一個6.2.3版本,還是不頂用。
然後無意識的進行調試,估計運氣問題,竟然讓我發現了問題所在,只能說是運氣好。
看一段小代碼,對參數的賦值,參數多資料庫支持時,類似這種寫法:
DbParameter
para
=
_fac.CreateParameter();//通過工廠廣告獲得當前資料庫類型的參數
para.ParameterName
=
parameterName;
para.Value
=
value
==
null
?
DBNull.Value
:
value;
para.DbType
=
dbType;
if
(size
>
-1)//設定長度。
{
para.Size
=
size;
}
para.Direction
=
direction;
這代碼其實很簡單:
產生了一個參數,然後賦參數名,參數值,參數類型,參數大小和參數指向。
而Mysql竟然在對參數Size賦值的問題處理上有些Bug。
當我調試跳過對para.Size賦值時,竟然正常了。
於是代碼改成了這樣:
if
(dbType
!=
DbType.Binary
&&
size
>
-1)//mysql不能設定長度,否則會報索引超出了數組界限錯誤。
然後我測試了下其它資料庫,發現指定size是正常的,最後得出一結論:
經過測試,其它資料庫類型對Size的賦值是正常的,唯Mysql有問題,為此,在編寫進行多資料庫支持的框架時,總會時不時的遇到好多問題,別糾結,始終要解決。
5. 你好、MySql存儲圖片用什麼類型呢
背景
MySQL 一直以來都有 TEXT、BLOB 等類型用來存儲圖片、視頻等大對象信息。比如一張圖片,隨便一張都 5M 以上。視頻也是,隨便一部視頻就是 2G 以上。
假設用 MySQL 來存放電影視頻等信息,一部是 2G,那麼存儲 1000 部就是 2TB,2TB 也就是 1000 條記錄而已,但是對資料庫性能來說,不僅僅是看記錄數量,更主要的還得看佔用磁碟空間大小。空間大了,所有以前的經驗啥的都失效了。
所以一般來說存放這類信息,也就是存儲他們的存放路徑,至於文件本身存放在哪裡,那這就不是資料庫考慮的范疇了。資料庫只關心怎麼來的快,怎麼來的小。
舉例
雖然不推薦 MySQL 這樣做,但是也得知道 MySQL 該怎麼做才行,做到心裡有數。比如下面一張微信圖片,大概 5M 的樣子。
root@ytt:/var/lib/mysql-files# ls -sihl 微信圖片_20190711095019.jpg274501 5.4M -rw-r--r-- 1 root root 5.4M Jul 11 07:17 微信圖片_20190711095019.jpg
拷貝 100 份這樣的圖片來測試
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`; do cp 微信圖片_20190711095019.jpg "$i".jpg;done;
root@ytt:/var/lib/mysql-files# ls
100.jpg 17.jpg 25.jpg 33.jpg 41.jpg 4.jpg 58.jpg 66.jpg 74.jpg 82.jpg 90.jpg 99.jpg f8.tsv
10.jpg 18.jpg 26.jpg 34.jpg 42.jpg 50.jpg 59.jpg 67.jpg 75.jpg 83.jpg 91.jpg 9.jpg 微信圖片_20190711095019.jpg
1111.jpg 19.jpg 27.jpg 35.jpg 43.jpg 51.jpg 5.jpg 68.jpg 76.jpg 84.jpg 92.jpg f1.tsv
11.jpg 1.jpg 28.jpg 36.jpg 44.jpg 52.jpg 60.jpg 69.jpg 77.jpg 85.jpg 93.jpg f2.tsv
12.jpg 20.jpg 29.jpg 37.jpg 45.jpg 53.jpg 61.jpg 6.jpg 78.jpg 86.jpg 94.jpg f3.tsv
13.jpg 21.jpg 2.jpg 38.jpg 46.jpg 54.jpg 62.jpg 70.jpg 79.jpg 87.jpg 95.jpg f4.tsv
14.jpg 22.jpg 30.jpg 39.jpg 47.jpg 55.jpg 63.jpg 71.jpg 7.jpg 88.jpg 96.jpg f5.tsv
15.jpg 23.jpg 31.jpg 3.jpg 48.jpg 56.jpg 64.jpg 72.jpg 80.jpg 89.jpg 97.jpg f6.tsv
16.jpg 24.jpg 32.jpg 40.jpg 49.jpg 57.jpg 65.jpg 73.jpg 81.jpg 8.jpg 98.jpg f7.tsv
mysql> show create table tt_image1G
*************************** 1. row ***************************
Table: tt_image1
Create Table: CREATE TABLE `tt_image1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` longblob,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> show create table tt_image2G
*************************** 1. row ***************************
Table: tt_image2
Create Table: CREATE TABLE `tt_image2` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` longtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
mysql> show create table tt_image3G
*************************** 1. row ***************************
Table: tt_image3
Create Table: CREATE TABLE `tt_image3` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image_file` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.00 sec)
tt_image1
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image1(image_file)
values (load_file('/var/lib/mysql-files/$i.jpg'))";done;
tt_image2
root@ytt:/var/lib/mysql-files# for i in `seq 1 100`;
do mysql -S /var/run/mysqld/mysqld.sock -e "insert into ytt.tt_image2(image_file)
values (hex(load_file('/var/lib/mysql-files/$i.jpg')))";done;
tt_image3
root@ytt:/var/lib/mysql-files# aa='begin;';for i in `seq 1 100`;
do aa=$aa"insert into ytt.tt_image3(image_file) values
('/var/lib/mysql-files/$i.jpg');";
done;aa=$aa'commit;';mysql -S /var/run/mysqld/mysqld.sock -e "`echo $aa`";
- mysql> select 'tt_image1' as name ,count(*) from tt_image1 union allselect 'tt_image2',count(*) from tt_image2 union all select 'tt_image3', count(*) from tt_image3;+-----------+----------+| name | count(*) |+-----------+----------+| tt_image1 | 100 || tt_image2 | 100 || tt_image3 | 100 |+-----------+----------+3 rows in set (0.00 sec)
- root@ytt:/var/lib/mysql/ytt# ls -silhS tt_image*274603 1.1G -rw-r----- 1 mysql mysql 1.1G Jul 11 07:27 tt_image2.ibd274602 545M -rw-r----- 1 mysql mysql 544M Jul 11 07:26 tt_image1.ibd274605 80K -rw-r----- 1 mysql mysql 112K Jul 11 07:27 tt_image3.ibd
- mysql> select * from tt_image3;+----+----------------------------+| id | image_file |+----+----------------------------+| 1 | /var/lib/mysql-files/1.jpg |+----+----------------------------+...100 rows in set (0.00 sec)
- mysql> DELIMITER $$mysql> USE `ytt`$$mysql> DROP PROCEDURE IF EXISTS `sp_get_image`$$mysql> CREATE DEFINER=`ytt`@`localhost` PROCEDURE `sp_get_image`()mysql> BEGIN DECLARE i,cnt INT DEFAULT 0; SELECT COUNT(*) FROM tt_image1 WHERE 1 INTO cnt; WHILE i < cnt DO SET @stmt = CONCAT('select image_file from tt_image1 limit ',i,',1 into mpfile ''/var/lib/mysql-files/image',i,'.jpg'''); PREPARE s1 FROM @stmt; EXECUTE s1; DROP PREPARE s1; SET i = i + 1; END WHILE; END$$mysql> DELIMITER ;mysql> call sp_get_image;
佔用磁碟空間大(這樣會帶來各種各樣的功能與性能問題,比如備份,寫入,讀取操作等)
使用不易
還是推薦用文件路徑來代替實際的文件內容存放
我們建三張表,分別用 LONGBLOB、LONGTEXT 和 VARCHAR 來存儲這些圖片信息
我們來給三張表插入 100 張圖片(插入前,建議把 max_allowed_packet 設置到最大)
檢查下三張表記錄數
看下文件大小,可以看到實際大小排名,LONGTEXT 欄位存儲的最大,LONGBLOB 欄位縮小到一半,最小的是存儲圖片路徑的表 tt_image3。所以這里從存儲空間來看,存放路徑最占優勢。
那麼怎麼把圖片取出來呢?
tt_image3 肯定是最容易的
tt_image1 直接導出來二進制文件即可,下面我寫了個存儲過程,導出所有圖片。
tt_image2 類似,把 select 語句里 image_file 變為 unhex(image_file) 即可。
總結
這里我舉了個用 MySQL 來存放圖片的例子,總的來說有以下三點:
6. mysql資料庫可以存圖片嗎
mysql資料庫是可以存儲圖片的,操作方法:
1、具體的腳本代碼如下,其中我們假定文件上傳域的名稱為Picture;
4、當HTML頁面被瀏覽時,每顯示一副圖片就會調用一次Second.php3文件。當第二個文件被調用時會傳入相應的Picture ID,我們可以藉此從資料庫中取回對應的圖片並顯示。
7. Mysql中如何實現Blob的存取
此實現為用java訪問mysql的blob,對圖片進行存取
/**
* Title: BlobPros.java
* Project: test
* Description: 把圖片存入mysql中的blob欄位,並取出
* Call Mole: mtools資料庫中的tmp表
* File: C:downloadsluozsh.jpg
* Copyright: Copyright (c) 2003-2003
* Company: uniware
* Create Date: 2002.12.5
* @Author: ChenQH
* @version 1.0 版本*
*
* Revision history
* Name Date Description
* ---- ---- -----------
* Chenqh 2003.12.5 對圖片進行存取
*
* note: 要把資料庫中的Blob欄位設為longblob
*
*/
//package com.uniware;
import java.io.*;
import java.util.*;
import java.sql.*;
public class BlobPros
{
private static final String URL = "jdbc:mysql://10.144.123.63:3306/mtools?user=wind&password=123&useUnicode=true";
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private File file = null;
public BlobPros()
{
}
/**
* 向資料庫中插入一個新的BLOB對象(圖片)
* @param infile 要輸入的數據文件
* @throws java.lang.Exception
*/
public void blobInsert(String infile) throws Exception
{
FileInputStream fis = null;
try
{
Class.forName("org.gjt.mm.mysql.Driver").newInstance();
conn = DriverManager.getConnection(URL);
file = new File(infile);
fis = new FileInputStream(file);
//InputStream fis = new FileInputStream(infile);
pstmt = conn.prepareStatement("insert into tmp(descs,pic) values(?,?)");
pstmt.setString(1,file.getName()); //把傳過來的第一個參數設為文件名
//pstmt.setBinaryStream(2,fis,(int)file.length()); //這種方法原理上會丟數據,因為file.length()返回的是long型
pstmt.setBinaryStream(2,fis,fis.available()); //第二個參數為文件的內容
pstmt.executeUpdate();
}
catch(Exception ex)
{
System.out.println("[blobInsert error : ]" + ex.toString());
}
finally
{
//關閉所打開的對像//
pstmt.close();
fis.close();
conn.close();
}
}
/**
* 從資料庫中讀出BLOB對象
* @param outfile 輸出的數據文件
* @param picID 要取的圖片在資料庫中的ID
* @throws java.lang.Exception
*/
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 pic from tmp 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("pic");
int size = 0;
/* while(size != -1)
{
size = is.read(Buffer); //從資料庫中一段一段的讀出數據
//System.out.println(size);
if(size != -1) //-1表示讀到了文件末
fos.write(Buffer,0,size);
} */
while((size = is.read(Buffer)) != -1)
{
//System.out.println(size);
fos.write(Buffer,0,size);
}
}
catch(Exception e)
{
System.out.println("[OutPutFile error : ]" + e.getMessage());
}
finally
{
//關閉用到的資源
fos.close();
rs.close();
pstmt.close();
conn.close();
}
}
public static void main(String[] args)
{
try
{
BlobPros blob = new BlobPros();
//blob.blobInsert("C:Downloadsluozsh1.jpg");
blob.blobRead("c:/downloads/1.jpg",47);
}
catch(Exception e)
{
System.out.println("[Main func error: ]" + e.getMessage());
}
}
}
8. 請問在mysql中怎麼存儲圖片呢
我一般是保存圖片地址,查詢資料庫獲得圖片在硬碟的位置,通過其他方式顯示圖片
相對路徑就不太清楚了,您可以試試設置環境變數,或者%HOME%之類的代碼