blob、clob字段小结(三)

Oracle是强大但在方便易用性上实在不敢恭维,自己搞了套LookAndFeel的Swing控制台奇丑无比且不好用(我在这并非抨击Swing,只是遗憾Oracle没有用好Swing,我可是Swing的坚定拥护者,过一阵我会专门开个Swing专栏),我真搞不懂Oracle的JDBC驱动就不能再封装一层,底层透明的自动插入empty_blob()/empty_clob(),不过如果你是用mysql,那么恭喜你mysql的大字段操作是很舒服的,不需要做任何而外的处理,且不要求启事务。

CREATE TABLE `emhookup` (
  `picid` int(10) unsigned NOT NULL auto_increment,
  `picname` varchar(50) NOT NULL default '0',
  `picmodifyid` int(10) unsigned NOT NULL default '0',
  `picturedata` longblob NOT NULL,
  `pictype` int(10) unsigned NOT NULL default '0',
  PRIMARY KEY  (`picid`),
  UNIQUE KEY `picid` (`picid`,`picname`),
  KEY `picid_2` (`picid`)
) TYPE=MyISAM;

sql.append(" insert into emhookup ");
sql.append(" (picmodifyid, picname, picturedata, pictype)values(?,?,?,?) ");
ps = con.prepareStatement(sql.toString());
ps.setInt(1, picmodifyid);
ps.setString(2, picName);
ps.setObject(3, DataProcess.toByteByGZIP(data));
ps.setInt(4, data.picType);
ps.executeUpdate();
ps.close();

不过使用Mysql存储大对象有个问题必须注意:【max_allowed_packet】属性必须设置为可能的最大数,否则如果一个字段的数据大于max_allowed_packet的话将无法进行保存和获取。

在linux下拷贝配置文件 cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
将my.cnf中的max_allowed_packet该成需要的大小即可

记得在《blob、clob字段小结(一)》中我提到存储速度问题,是这样的:刚开始我用一张表存储一张图纸,用一条记录存储一个图元,结果在存储几万个图元的大图纸是出现了无法忍受的速度问题,每张图纸打开需要二十秒以上,进行了JDBC的各种参数优化都无济于事,后来我改成一张图纸就存一条记录,也就是说所有图纸上的说有内容都在一个blob字段中,结果打开一张几万个图元的图纸都不会超过三秒的时间。打个比喻:背着书包上学快,还是一本一本的来回那书快啊,虽然书是一样多的,虽然一本书比一包书轻,但是...

大字段还有很多用途的,让我们在现实中慢慢挖掘它的潜力吧

你可能感兴趣的:(oracle,sql,mysql,linux,swing)