今天碰到这个问题,起先以为是因为字段varchar(2)类型的问题,
后来网上查了下,原来oracle10g的驱动程序有问题,
检查了下程序,是保存相片出问题,photo字段为blob 类型,从一个表查询出来 保存到另外一张里面去,没注意null和空串的问题,本例为hibernate
一张相片:
if(blob!=null)
tbl.setPhoto(blob);
另外一张:
BASE64Decoder base64Decoder = new BASE64Decoder();
if(strPhoto!=null or "".equals(strPhoto)
byte[] bytePhoto = base64Decoder.decodeBuffer(strPhoto);
Blob blobPhoto = Hibernate.createBlob(bytePhoto);
tbl.setPhoto(blobPhoto);
另外一种方法利用jdbc来处理
/**
* 保存操作日志(POJO中的信息)
* @param POJO 在Hibernate配置文件中存在的POJO对象
* @param linkTblno 业务编号
* @param applyType 业务类型
* @param operType 操作类型 D-删除 U-修改 对控制信息:C-撤控 F-复控
* @param process 流程状态信息
* @throws Exception
*/
public void saveLogFormPOJO(Serializable pojo,
String linkTblno,
String applyType,
String operType,
String process) throws Exception{
Log.debug(this.getClass(), "保存操作日志(POJO中的信息)...");
String tableName = pojo.getClass().getName();//表名
int d = tableName.lastIndexOf(".");
tableName = tableName.substring(d+1);
Object object[] = this.getOperresult(pojo);
String operresult = (String)object[0];
InputStream photo = (InputStream)object[1];
this.saveLog(linkTblno, applyType, operType, process, tableName, operresult, photo);
Log.debug(this.getClass(), "保存操作日志完成");
}
详细 见 PoperlogtblDAO