2024年1月1日发(作者:)
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
目 录
1.1
在Hibernate中实现二进制和mem类型的字段的数据访问 ................................................. 2
1.1.1
数据库系统的二进制数据和大文本数据 ......................................................................... 2
1.1.2
编程项目相关的POJO类 ............................................................................................. 7
1.1.3
构建数据库表和POJO类之间的映射配置文件 ............................................................. 12
1.1.4
编程相关的DAO类程序代码 ..................................................................................... 15
1.1.5
应用单元测试用例测试本示例的应用效果 .................................................................... 21
1.1.6
执行单元测试用例 ..................................................................................................... 26
1.1.7
包中的Blob和Clob接口 ............................................................................ 29
杨教授工作室,版权所有,盗版必究, 1/30页
1
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1 在Hibernate中实现二进制和mem类型的字段的数据访问
1.1.1 数据库系统的二进制数据和大文本数据
1、二进制数据和大文本数据的存储
对数据库中涉及“mem”类型的字段,一般在设计时定为VARCHAR2类型,但其最大长度为4000 bytes,即可以支持两千汉字以内的长度,而我们在实际的应用中,可能往往会超过两千汉字,从而导致超出的部分不能写入数据库中,因此我们有必要改为大字段类型。
另外的一个问题是,就是在数据库中VARCHAR和VARBINARY的存取是将全部内容从全部读取或写入,对于100K或者说更大数据来说这样的读写方式,远不如用流进行读写来得更现实一些。
通常,要解决超过4000字节的数据,一种做法是将数据写入文件,xml或plain file都可以,数据表中保存文件的路径即可。这种做法不必处理clob(Character Large Object),blob(Binary Large Object)等格式的字段类型,但不易做transaction的控制,而且增加了对文件的处理操作,不算是较佳的一个方案。另一个做法是使用clob, blob等字段类型。下面给出实现的说明和过程。
2、设计一个数据库表
(1)本示例的数据库表结构如下
其中所应该注意的是image类型和ntext类型的含义。在Oracle中如何表示?在MySQL中如何表示?(为longblob和longtext)
杨教授工作室,版权所有,盗版必究, 2/30页
2
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
(2)对应的SQL语句如下
DROP TABLE IF EXISTS `tuser`;
CREATE TABLE `tuser` (
`id` int(11) NOT NULL,
`name` varchar(50) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`picture` longblob,
`resume` longtext,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;
-- ----------------------------
-- Records of tuser
-- ----------------------------
INSERT INTO `tuser` VALUES ('1', '张三', '20',
0xFFD8FFE000104A46494600480000FFDB070A0705070A0C090707090C0D0B0B0C0B0B0D110D0D0D0D0D0D110D0F1011100F0D41E1D1D1D1E22222222222222222222FFDB0D0C0D181010181A1511151A222222222222222222222222222FFCF00C401031101FFC4001C0801FFC404050D杨教授工作室,版权所有,盗版必究, 3/30页
3
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
6249137527275B638492B2B3B4C1E1FFC4001AFFC4002B17181B1D1F0FFDA000C11003F00F481ED41F12B41594839527D43E282AA05044B8DC99861B49CAA43EAD8C329F52D5FFA007527D856264486C39B46FC6EC79B1DB35915D028140A05028140A05028140A05028140A05028141F1690A494A86527A11F4A0D4B51DAB50D99DFDBDA5FEFD31D2BF156370FDDBCDF7FE1D5D4B4B1DF6FA4FB0F9D278172C7C52D1F75D22E6AB12B916E8DD2707461C8EBCED287123A83B8D67BB813E46B8D30CE92735778C42AC0DB25F1293D9481D3CBDBA93D00F9ACEF031FC3D5DCEEB6FF00DEBBDB7C89B724EF8B14FF00AB43272D23FB4A1E657FF2B4A57E46D29502323B1ED520AA8140A05028140A05028140A05028140A05028140A0B7210A7185A12B2DA94920389C6E4E7DC672323F2A0E61AAB59EA1D017103F6B0D4715C3972D7212D3335947BA9121A0868FF65C40CFCD55CDABA639DA657F4BD2F36A2B36A4711FF70E37AD756459B22F17BB0FF0F6EBC32A66F36B6C942DA59ECE29B57AC157A8A463DC5578CB36B7D9B6AB474A56369DEDF3131B4C29B48B86A3D2167B53118C87220F395AC88DE4C8694E63D581D4213EFDEAB66CB14BDA667CAF697166CF8EB5DA2B4AFCCFCFFB6C91E1DEA135E0EF124BD18F6E4B8B43493F1CB4F41F438AA56CF3E2378877F1692BEFF75FF31FE17AD3C57D41A3AE296DA94E5CAD591CD87255BCA53FEED5DC1F8AB5A6D65EBFD11EB7A362CF5DF6EDB7E1DF74DEA0B6EA0B3C7BBDB97BE2C94EE4FC83EE93F515DBC7922D1BC3C56A305B15E6B6F30C956E88A05028140A05028140A05028140A05028140A0D6388BAC3F766CEDBED6152E4381A651EE73DCFE954BA86A2D8E9E9F32E8F48D07EE72EDFC63CB92BB6D81710FC9BB2CC99CF12A53CB3F8B3EC3B015E7AD333CCF97B3ACCD36AD3DB1F08B72B4E9B7596D298C848491BFE4803B63EB5B562598EE9F772B8F5F22B310331D0965B40E884F4159AD0FD3E79E5ABDD751AC950DDD2A5AE34DDD10D4674F53AF9567353D71A2B66777FB2E5D249B3CCB63B92CA55CE673ED9F50ABDA1B7330F31D7A9BED7FECE957DDEABF5A23F31C430F97C3A96DC5A02B6345433B08F7AE8B808303505CD018888FE216F4894D4790BEBB9A63AA3F120127B77A093FBC3744C98CCC86911D0FF291CDFF002C9E72CF99B250BF2F4F4D042B76A0BB8B446119A4ADE71A94E0F2BAF6E5B4E94A518DFB8027F1134175ED4B7D61D909750C7F0C6205A762C13E2BD43D6杨教授工作室,版权所有,盗版必究, 4/30页
4
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
40DA6825EA9764226DB12C174F35D7029A6DD535BF0D9201208F7A04399764DD05AD92D865A659795CEDEB770A5E1682BDDDC0EC714119BD59715C666425B6F6CA625BCD270ACB7E1BB6FF37981C7D282CBBABAF4D4471F2860ED891E601B57D9E50494FABDBE6836C141F68140A05028140A050718FB43CB7D172B76CF430824FE6AAE2F53E6F0F5FF004B563B2DF973E1AA4168051C2BDEB9F157A0B561065EA94A73EF52D6AD27662266A8796309A92B4476B43132EE0E38327B9A9AB557BE4458E14EBC3F3A93655B5DE85FB3B33CA90EA523A06CE6A5D247ADC7EAF3E86C9ACB8BDA52C973762DEB4FDCDFF0CE725133C1B4B614A50ECD38E389CE6BA4E0B296ED6F61BC697B8DDA4D926C4B7DA1A5BCB8D708ADB6B525A6CB9F7482A524F41D3A8A0CBE9A9F64D456685A82145D8CCB6C38D735080EA53E900EDDDEDF068309A964E9787AAAD1A79F8A7C45D9B79B889432DA986F679D6A3E64292A3F201A0D923D82D2D474B2A8EDB984A52A5B884A94AE58C24A8E3A91ED4129D8711D5B6E3CCA16B6BAB4A524129FECE7B5013162A6419096D024286D53A00DE47C1577A0A05BADE37E186C73461CF28F303DC1F9A0A0D9ED18C784671808C72D1E949C81DBBC003091D00A0AA8140A05028140A050732E3A598C88D1A62539032DA8FF0085733A8E3E625E83E9ED46DBD5C0EED0D6CA8E2A8D61E9E72B0B27998A962A82F950D7CCA962156F91486944F5ACA29B3236D63EF451ABD27C02B23B1ED0EDC5C180EE108FD3BD59D155C5EAD939ED57F68EFF0031A1FF007A45FF0005D5D729B6711BFA3DD45FDD733FF1D741C4556C6B4FF0AB4EEB9B4DCA4FEF187DA6908E71285A77AC18C1ACE309DBD7F5F9A0E85C40FE997427FC77FDAA089A8612758F195FD2B7C94FB363816E4C98B05974B21F75446E70EDC13B371FE541F3879A82F70B4B6B6851E43970674EB92D16694E9E62941B6D6A4B5BBF16D281FCE8343BFDBE344E0CC1D591EF52CDFEEAF8F1C4C9594BEADEBDC828CFFA2DBDFF003F9A0F45BB2A2B2B6DB79D436E3A70D254A00ACFC241EA7BD0732D55013ABB8CC349DEA4BED58A35ABC5C78ACBAA683CF97305676E376013FF002FE74131CBBAEC1C17B9C9D3F7A37C7EDCDBADB3713E65A09501D719CF242F23E941A95C6D4DE92D35A5B5958AE72A46A1B9C88899616F975338494153A828248E8AE9F4F7EB8A0D8F89309EBAF1874AD9552E447833234BF1223BAA694A4A1A714465247A80DA7E868347469C0BD2BAE16AB84EE56979EF376567C42F633CB748DD8CF994768EFF00A77A0ED9A42EDBF42D96E7739090EC8B7C575F7DE504EE71C652A2493EE4D06A7C5F7644ED59A4F4B3D25E8B63BB3EF78E532B2D174B69杨教授工作室,版权所有,盗版必究, 5/30页
5
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
4F2DA2A1ECA52B18A0CD70E2D366B1BF77B2DB2F4AB9351A46EF02E2F7AA0EE07EEB7124E0E3DFE0FD6838E42B3BEFF02646B27AE13557AB7CA1E057CF5ED68192D34404F639DE4E4F5A0F42D99F7A4D9E1487705D763B4B593FD65201341F2FB668D78B6BB0640F2AC743F07DAA3CB8FBABB25C19E71DE2D1F0F3F710343CDB3495B4FB7E4FC0E7B115C7BE29ACF2F5DA4D5D72D7873D990B6935984D663D6C62A4857B290DD65A371E17E85B96ACBF222C649115A20CA93F8509FAFF00B47D856D5A774ECADA8D4462AEF3E5EA7B45AE2DAEDCCDBE2276B0C242123F2F73F9D74A94ED8D9E7325E6D3BCA3EA3D2F63D470510EF2C7888ADB897D08DCB461C47A5594149E99AD9AA5DC6DF12E16F916E9A8E64394D2D87DBCA86E6DC4ED52729208C83EC7341AC42E0CF0DA0DCA2CF8B6A4A1F87831C731D520293D9650A514A943A7522833970D2F62B85E60DEA5C7E65CED9BFC13DBD6397CC1857952A095647C8A085AB3877A4355A9A72F50F9AFB030CC84294D3A949EE9DE82938EB412AD5A62D961B02ACFA7996E134942F9391BD216A1EB5E7AAFAF7C9A0E3CFF0005F55DC91FB2DCD3D6BB6AE4484AE7DF63BEB3BDA4AB38663A8A8B5BBA640C0FA0A0EC777D2F63BC4C813AE4C73A55B1CE7427372D3CB70E32AC20807D23A1A087AB7879A4B5616577C87CF7A3F469E4AD6D38907B8DC820E0E7B504FB4E99B15A6C89B2408A866D49414786EE92957AB76EC9567DF34183B2707F87B65BBA6EF6FB6844C6C9531BD6E38868ABB96D0B514A7E9D3A7B5066A6696B1CCBFC2D41218DF77B7A5C44391BD7E40EA4A57E40A08390A3DC50444F0FB49261DD61261FF0D7B714FDD11CC77EF9C5AB72959DF94E49FC381415DCF43698BA69B634D4E8BCDB2464B48663F31C1B43030DF992A0B3803DCD05DD51A3F4F6A880205F23092C215BDA395256858ECA4AD24281FD6829D2DA2F4DE9682B83638DE1DA755B9D3B94B5AD5F2A5AC951FE74119AE1BE8C6F4A3BA51107160797CC762F35EEAADE1CCEFDFCCF5A41F550671888CC78EDC7646D65A484369EF84A4600C9C9ED4174D041BCD92DB7986A893DB0E347F98FCAB4C98E2D1B4A4C19AD8E77AB8DEB5E015EDB5A9FB1A9B96C1ECDAC86DC1FA9C24D50BE9263C3B9A7EAF5B47AB896947823C4E90F7299B6A064FA8C8631FF005E6B15C16497EA346D7A53ECB57275C4BFAA6E28699CF58B0BCCA23E0B8B000FD01AB15D328E6EA9F676BD37A6ACDA76DA8B6DA23A63C56FD93DC9FEB28FB93566B48AF872F2649BCEF2C956CD4A05028140A05028140A05028140A05028140A0507FFD9, '这是用户的个人简历的文本信息字符串.....');
杨教授工作室,版权所有,盗版必究, 6/30页
6
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1.2 编程项目相关的POJO类
1、设计TUser表相匹配的PO类——添加PO类
2、在该PO类中添加如下的成员属性
private Integer id;
private String name;
private Integer age;
private Blob picture;
private Clob resume;
private InputStream userPictureIOStream;
private String userResumeText;
杨教授工作室,版权所有,盗版必究, 7/30页
7
// private int id;
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
3、为这些成员属性添加get/set方法
4、添加hashcode/equals方法
5、POJO类最终的代码
package t;
import ;
import putStream;
import tFoundException;
import tream;
import ;
import ;
杨教授工作室,版权所有,盗版必究, 8/30页
8
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
public class TUser {
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
@Override
public int hashCode() {
}
final int prime = 31;
int result = 1;
result = prime * result + ((age == null) ? 0 : de());
result = prime * result + ((id == null) ? 0 : de());
result = prime * result + ((name == null) ? 0 : de());
result = prime * result + ((picture == null) ? 0 : de());
result = prime * result + ((resume == null) ? 0 : de());
return result;
if (obj == null)
return false;
if (getClass() != ss())
return false;
TUser other = (TUser) obj;
if (age == null) {
if ( != null)
return false;
} else if (!())
return false;
if (id == null) {
杨教授工作室,版权所有,盗版必究, 9/30页
9
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
if ( != null)
return false;
} else if (!())
return false;
if (name == null) {
if ( != null)
return false;
} else if (!())
return false;
if (picture == null) {
if (e != null)
return false;
} else if (!(e))
return false;
if (resume == null) {
if ( != null)
return false;
} else if (!())
return false;
return true;
}
public Integer getId() {
return id;
}
private void setId(Integer id) {
= id;
}
public String getName() {
杨教授工作室,版权所有,盗版必究,10
10/30页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
return name;
}
public void setName(String name) {
= name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
= age;
}
public Blob getPicture() {
return picture;
}
public void setPicture(Blob picture) {
e = picture;
}
public Clob getResume() {
return resume;
}
public void setResume(Clob resume) {
= resume;
}
private Integer id; // private int id;
private String name;
private Integer age;
private Blob picture;
private Clob resume;
杨教授工作室,版权所有,盗版必究,11
11/30页
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
}
1.1.3 构建数据库表和POJO类之间的映射配置文件
1、针对上面的TUser数据库表的映射文件为()——添加文件
private InputStream userPictureIOStream;
private String userResumeText;
public String getUserResumeText() {
}
public void setUserResumeText(String userResumeText) {
}
public void setUserPictureIOStream(InputStream userPictureIOStream) {
}
public InputStream getUserPictureIOStream() {
}
return userPictureIOStream;
ctureIOStream = userPictureIOStream;
sumeText = userResumeText;
return userResumeText;
public TUser() {
}
杨教授工作室,版权所有,盗版必究, 12/30页
12
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
2、设计该文件的内容
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"/">
杨教授工作室,版权所有,盗版必究, 13/30页
13
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
或者采用下面的配置
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"/">
杨教授工作室,版权所有,盗版必究, 14/30页
14
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
3、在中添加对文件的引用。
1.1.4 编程相关的DAO类程序代码
添加一个UserInfoDAO类代码实现将某个图片文件保存到数据库表中
1、添加UserInfoDAO类,包名称为
杨教授工作室,版权所有,盗版必究, 15/30页
15
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
2、UserInfoDAO类的代码
package ;
import ption;
import tream;
import ;
import ;
import ateException;
import n;
import ction;
import ;
杨教授工作室,版权所有,盗版必究, 16/30页
16
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
public class UserInfoDAO {
public UserInfoDAO() {
}
public boolean addOneUserInfo(TUser oneUserInfoPO){
Session session = null;
Transaction tx = null;
try {
session = tSession();
tx = ransaction();
/**
* 下面为具体的数据访问操作的代码
*/
try {
/**
* 获得图片的文件流对象及文件的长度
*/
InputStream userPictureIOStream =rPictureIOStream();
long userPictureFileLength
=rPictureIOStream().available();
/**
* 将所获得图片的文件流对象转换为Blob对象,并保存到oneUserInfoPO对象中
*/
Blob userPicturBlob=Helper().createBlob(userPictureIOStream,
userPictureFileLength);
ture(userPicturBlob);
/**
杨教授工作室,版权所有,盗版必究, 17/30页
17
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
* 获得用户的个人简历文本信息字符串
*/
String userResumeText = rResumeText();
/**
* 获得用户的个人简历文本信息字符串转换为Clob对象,并保存到oneUserInfoPO对象中
*/
Clob userResumeClob=Helper().createClob(userResumeText);
ume(userResumeClob);
} catch (IOException e) {
}
/**
tackTrace();
}
* 将用户信息保存到数据库表中
*/
(oneUserInfoPO);
();
catch (HibernateException he){
}
finally {
/**
由于由Hibernate抛出的异常都视为不可以恢复的,因此应该确保在 finally 代码杨教授工作室,版权所有,盗版必究, 18/30页
18
if (tx != null){
}
throw he;
ck();
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
块中调用close()方法,以关闭掉 Session。
}
public TUser selectOneUserInfo(Integer userID){
TUser oneUserInfoPOFromDB=null;
TUser returnOneUserInfoPO=null;
Session session = null;
Transaction tx = null;
try {
session = tSession();
tx = ransaction();
/**
* 获得从Hibernate查询返回的PO对象(持久对象,并且与Session相关)
*/
oneUserInfoPOFromDB=(TUser)(, userID);
/**
* 将所获得的持久PO对象转存在新的PO对象中
*/
returnOneUserInfoPO=new TUser();
(());
e(e());
ture(ture());
ume(ume());
(());
杨教授工作室,版权所有,盗版必究, 19/30页
19
}
*/
ession();
return true;
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
}
();
catch (HibernateException he){
}
finally {
/**
由于由Hibernate抛出的异常都视为不可以恢复的,因此应该确保在 finally 代码if (tx != null){
}
throw he;
ck();
块中调用close()方法,以关闭掉 Session。
}
3、注意在Hibernate4中的per类
}
}
*/
ession();
return returnOneUserInfoPO;
杨教授工作室,版权所有,盗版必究, 20/30页
20
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1.5 应用单元测试用例测试本示例的应用效果
添加一个对UserInfoDAO类的测试类TestUserInfoDAO
1、类名称为TestUserInfoDAO,包名称为
杨教授工作室,版权所有,盗版必究, 21/30页
21
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
2、编程该测试类的代码
package ;
import putStream;
import tFoundException;
import tputStream;
import ption;
import tream;
import ;
import ;
import eption;
杨教授工作室,版权所有,盗版必究, 22/30页
22
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
import ;
public class TestUserInfoDAO {
private UserInfoDAO oneUserInfoDAO=null;
public TestUserInfoDAO() {
}
public void testAddOneUserInfo(){
}
杨教授工作室,版权所有,盗版必究, 23/30页
23
oneUserInfoDAO=new UserInfoDAO();
/**
* 下面的代码是构建出测试用的参数
*/
TUser oneUserInfoPO= new TUser();
(20);
e("张三");
FileInputStream userPictureIOStream=null;
try {
userPictureIOStream = new FileInputStream("E:");
} catch (FileNotFoundException e) {
}
tackTrace();
String userResumeText="这是用户的个人简历的文本信息字符串.....";
rPictureIOStream(userPictureIOStream);
rResumeText(userResumeText);
/**
* 下面的代码是调用addOneUserInfo方法实现保存数据
*/
UserInfo(oneUserInfoPO);
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
public void testSelectOneUserInfo() {
int userID=1;
/**
* 获得数据库表中返回的PO对象
*/
TUser oneReturnUserInfoPO=OneUserInfo(userID);
/**
* 从所获得的PO对象中提取出各个成员属性数据值
*/
int userAge=();
String userName=e();
Blob userPicturBlob=ture();
Clob userResumeClob= ume();
/**
* 将所获得的各个成员属性数据值打印显示
*/
try {
n("姓名:"+userName+",年龄:"+userAge+"简历:"+
String((long)1,
(int)()));
} catch (SQLException e) {
}
/**
* 将所获得的用户图片的Blob对象转存为图片文件
*/
InputStream userPictureInputStream=null;
try {
杨教授工作室,版权所有,盗版必究, 24/30页
24
tackTrace();
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
{
userPictureInputStream = aryStream();
} catch (SQLException e) {
}
tackTrace();
FileOutputStream userPictureOutputStream=null;
try {
userPictureOutputStream = new FileOutputStream("E:");
} catch (FileNotFoundException e1) {
}
tackTrace();
byte[] pictureDataByteBuffer=null;
int dataLengthPerRead;
try{
pictureDataByteBuffer=new byte[ble()];
while((dataLengthPerRead=(pictureDataByteBuffer))!=-1)
(pictureDataByteBuffer,0,dataLengthPerRead);
}
();
();
}catch (IOException e) {
}
public static void main(String[] args) {
TestUserInfoDAO oneTestUserInfoDAO=new TestUserInfoDAO();
//dOneUserInfo();
杨教授工作室,版权所有,盗版必究, 25/30页
25
}
tackTrace();
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
}
}
lectOneUserInfo();
1.1.6 执行单元测试用例
1、修改文件
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"/dtd/">
name="">jdbc:mysql://localhost:3306/DataBase?useUnicode=true&characterEncoding=utf-8
杨教授工作室,版权所有,盗版必究, 26/30页
26
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
tion.C3P0ConnectionProvider
否则将会出现下面的错误
杨教授工作室,版权所有,盗版必究, 27/30页
27
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
如果存入的文件大于mysql默认的 max_allowed_packet值。可以采用下面的解决办法:在mysql安装目录下的文件中的最后一行添加
max_allowed_packet = 10M(也可以设置自己需要的大小)。
2、执行测试程序
杨教授工作室,版权所有,盗版必究, 28/30页
28
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
1.1.7 包中的Blob和Clob接口
1、Blob接口
The representation (mapping) in the Java programming language of an SQL BLOB value. An
SQL BLOB is a built-in type that stores a Binary Large Object as a column value in a row of a
database table.
利用Blob接口中的getBinaryStream()方法,可以获得其InputStream对象,从而获得二进制的数据流,转换为某个输出流。
下面的代码实现从Blob字段中获得二进制数据并且保存到某个文件中。
Blob img=ture();
InputStream is=aryStream();
FileOutputStream
FileOutputStream("C:/temp/HibernateTest/classes/");
byte[] buf=new byte[1024];
int len;
while((len=(buf))!=-1)
{
(buf,0,len);
}
();
();
2、Clob接口
The mapping in the Java programming language for the SQL CLOB type. An SQL CLOB is a
built-in type that stores a Character Large Object as a column value in a row of a database table.
杨教授工作室,版权所有,盗版必究, 29/30页
29
fos=new
杨教授工作室 精心创作的优秀程序员 职业提升必读系列资料
利用Clob接口中的getSubString(long pos, int length)方法可以获得该内容的拷贝。参考下面的代码
Clob resume=ume();
n(String(1,(int)()));
利用Clob接口中的getCharacterStream()方法,可以获得针对该内容的对象,从而利用字符流将该长文本内容保存为一个字符文件。
3、Hibernate 3.X版本的系统中ate 包中的Hibernate类
public static Blob createBlob(InputStream stream) throws IOException方法
public static Clob createClob(String string)方法
注意:在Hibernate 4.X中已经改变了这样的做法
4、下面为Hibernate 3.X版的代码
FileInputStream imgis= new
FileInputStream("C:/temp/HibernateTest/classes/");
Blob img=Blob(imgis);
ture(img);
Clob resume=Clob("ikytklttiutluiiutluyliuyluyluylyuyliuyl");
杨教授工作室,版权所有,盗版必究, 30/30页
30


发布评论