1. 程式人生 > >hibernate_對映大欄位(圖片,長文字等)

hibernate_對映大欄位(圖片,長文字等)

示例程式, 儲存一張圖片到mysql 資料庫, 然後進行讀取:

@Before
	public void testSave() throws Exception{
		Session session = HibernateUtil.getInstance().getSession();
		session.beginTransaction();
		
		BlobObj obj = new BlobObj();
		File file = new File("C:\\Users\\Jack\\Workspaces\\MyEclipse 2016 CI\\hibernate\\huangmengdan.jpg");
		FileInputStream fis = new FileInputStream(file);
		//在hibernate3.5:
		//Hibernate.createBlob(InputStream);
		//session.getLobHelper(): 得到一個大欄位建立助手
		obj.setImg(session.getLobHelper().createBlob(fis, file.length()));
		session.save(obj);
		
		session.getTransaction().commit();
		fis.close();
		session.close();
	}
	
	@Test
	public void testGet() throws Exception{
		Session session = HibernateUtil.getInstance().getSession();
		
		BlobObj blobObj = session.get(BlobObj.class, 1L);
		Blob blob = blobObj.getImg();
		
		File file = new File("C:\\Users\\Jack\\Workspaces\\MyEclipse 2016 CI\\hibernate\\women.jpg");
		FileOutputStream fos = new FileOutputStream(file);
		InputStream is = blob.getBinaryStream();
		int len = 0;
		byte[] buf = new byte[1024];
		while((len=is.read(buf)) > 0){
			fos.write(buf, 0, len);
		}
		fos.flush();
		fos.close();
		is.close();
		
		session.close();
	}

如果你用的mysql 驅動是5.0.8 及以下版本, 這句程式碼session.getLobHelper().createBlob(fis, file.length()) 會報一個異常:

java.lang.AbstractMethodError: Method com/mysql/jdbc/PreparedStatement.setBinaryStream(ILjava/io/InputStream;J)V is abstract

原因: hibernate3.5 以上版本對Blob 的建立方法進行了改動.

解決方案: 下載mysql 最新的驅動程式, 替換即可.

下面介紹大物件型別在java, sql, hibernate 中對應的型別:


相關推薦

hibernate_對映(圖片,文字)

示例程式, 儲存一張圖片到mysql 資料庫, 然後進行讀取: @Before public void testSave() throws Exception{ Session session = HibernateUtil.getInstance().getSes

JPA之資料對映延遲載入

1、修改Person.java中的程式碼 package cn.sunft.bean; import java.util.Date; import javax.persistence.Basic; import javax.persistence.Column; imp

分治法 解決最和問題

分治法求解最大欄位和問題 1 問題描述   給定由n個整數(可能由負數)組成的序列(a1, a2,...,an),最大欄位和問題求 該序列中連續子段和的最大值,並找出這個連續子段。 2 使用python程式設計解決,具體程式碼如下   # 求出最大子段和, 以及最大子段和 對應的位置

和 動態規劃

最大子段和 給定由n個整數(可能有負整數)組成的序列(a1,a2,…,an),最大子段和問題要求該序列形如 的最大值(1<=i<=j<=n),當序列中所有整數均為負整數時,其最大子段和為0。 #include<stdio.h> #include<

演算法 | 最

         #include <stdio.h> int a[100001],dp[100001]; int main() { int T,n; while(~scanf("%d",&n)) {

Oracle varchar2改成型別clob

做專案中經常碰到資料庫改欄位問題,給自己做個記錄,下次直接可以拿來用了。Oracle 有些欄位直接修改會報錯ORA-22858: invalid alteration of datatype。不允許修改。不允許修改怎麼辦呢。。總不能把表幹掉重新建欄位吧。這在生產肯定行不通。可以先建個新欄

Dynamics CRM SQL查詢OptionSet對應的文字

SELECT Value FROM StringMap WHERE AttributeName='欄位名稱' and LangId=2052 and--語言 1033為英文 ObjectTypeCode=( SELECT [ObjectTypeCode] FROM Entity WITH

HDU 1231 簡單DP之最

原題地址:http://acm.hdu.edu.cn/showproblem.php?pid=1231 演算法核心: 動態規劃, 陣列為vec[]vec[],設dp[i]dp[i] 是以vec[i]

關於最和的若干解法和優化

最大欄位和是常見的一個入門演算法問題,根據演算法的優化程度,這裡分為了四種方法: 第一種:複雜度為O(N ^ 2),兩個用於語句巢狀 int summax_1(int *a,int tem) { int temp=0,temp_maxi=0,temp_maxj=

提交訂單效能優化系列之013-測試SQL語句中少查詢幾個(包括)

概括總結 這一版本寫了兩個測試類,一個測試類中查詢全部欄位,另一個測試類中只查詢必要的欄位,然後對比效能。結論是:根據是減少的欄位的長度不同,效能會不同。具體請檢視下面的測試結果。 013版本更新說

ElasticSearch學習筆記六 對映( Mapping Meta-Fields)

Meta-Fields 每個文件都有與之關聯的元欄位,例如_index、_type和 _id 元欄位。 元欄位是mapping對映中用啦描述文件本身資訊的欄位。 Identity meta-fields(文件標示元欄位) _index 文件所屬的索引。 多索引

演算法優化:最和,雙指標遍歷(n^2),分治法(nlogn),動態規劃(n)

最大欄位和,有點類似與最長公共子序列,這裡是求連續一段求和最大的一段,比如[-2,11,-4,-4,13,-5,-2]最大求和的連續一段為11,-4,-4,13,和為16. 最基本的雙針模型遍歷,兩個指標,分別代表最大和序列的起始和終止,演算法時間複雜度O(n^2) # 以下演算法時

MyBatis中五種成功對映資料庫與實體類屬性不一致的解決方案

在Mybatis中,當根據某欄位查詢資料庫資訊時,如果資料庫欄位名與實體類屬性名稱不一致,查詢時,會出現賦值不上的情況,值為Null。本次將給出五種方案,其中方案三、四為推薦。例如:根據學號sno查詢學生資訊1.資料庫表student欄位名稱以及型別:2.資料庫表內容:3.實

Django 設定admin後臺的某一個model的為富文字編輯器

Django 設定admin後臺的某一個model的欄位的型別為富文字編輯器,該富文字編輯器不但能夠上傳資料,還能夠上傳圖片,並能夠顯示圖片。 首先,在models.py中,建立一個models類,欄位的型別先設定成CharField class Article(models.Model

c# 對oracle插入資料超出限制的解決方案

通過建立儲存過程的方法解決問題,如下所示,儲存過程的名字為insertGEO,有4個輸入引數,Childrens,RingInParent直接通過sql語句插入時,欄位值過長會報錯,所以先在資料庫中建立儲存過程 create or replace procedure insertGEO (v_i

讓天下沒有難用的資料庫 » innodb使用text,blob的一些優化建議

最近看到一些老應用,在表結構的設計上使用了text或者blob的欄位;其中一個應用,對blob欄位的依賴非常的嚴重,查詢和更新的頻率也是非常的高,單表的儲存空間已經達到了近100G,這個時候,應用其實已經被資料庫綁死了,任何應用或者查詢邏輯的變更幾乎成為不可能; 為了清楚大欄位對效能的影響,我們必須

POJ 1050 To the Max 最大子矩陣和(二維的最和)

傳送門: To the Max Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 52306 Accepted: 27646 Description Given a two-dimensional array of positive

@column 和瞬時

大欄位     @Lob //對應Blob欄位型別        @Column(name = "PHOTO")        private Serializable photo;        @Lob //對應Clob欄位型別        @Column(name

sqlserver 儲存格式(一)

資料頁 資料頁是包含已經被新增到某個資料庫表中的使用者資料的結構,SQLServer有3種資料頁面,每個頁面都以一種不同的格式儲存資料。分別是用於行內資料、行溢位資料和LOB資料的頁面。 和其他型別的頁面一樣,資料頁面具有8KB的固定長度,它們主要由3個主要部分組成,頁首、資料行和行偏移陣列 頁首 每個

list 展示小技巧

1、有內容的應該控制長度 <th class="center" style="width:350px;">資料簡介</th> <td> <c:choose>    <c:when test="${fn:length(v