<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-72  評論-63  文章-0  trackbacks-0
    在網上閑逛找到了解決方案:
    ???? 現在3.x中對blob和clob增加了org.hibernate.lob.SerializableBlob和org.hibernate.lob.SerializableClob類的封裝。

    其次如果你將前面的測試程序放到weblogic的容器中通過weblogic的數據源得到連接的話,你會發現oracle.sql.BLOB blob = (oracle.sql.BLOB)person.getImage();和 oracle.sql.CLOB clob = (oracle.sql.CLOB)person.getArticle();這倆行會出錯,原因就是weblogic進行了包裝。

    現在將以上兩個問題的綜合解決方案用以下代碼說明:



    ????????????for (int i = 0; i < 10; i++) {
    ????????????????LargeObject large = new LargeObject();
    ????????????????large.setId(i + "");
    ????????????????large.setName("林意煒");

    ????????????????// 插入一個小數據數據
    ????????????????large.setImage(Hibernate.createBlob(new byte[1]));
    ????????????????large.setArticle(Hibernate.createClob(" "));

    ????????????????session.save(large);
    ????????????????session.flush();

    ????????????????// 鎖定該記錄
    ????????????????session.refresh(large, LockMode.UPGRADE);

    ????????????????// 插入圖片數據
    ????????????????String fileName = "E:/AAA/" + i + ".jpg";
    ????????????????SerializableBlob sb = (SerializableBlob)large.getImage();
    ????????????????java.sql.Blob wrapBlob = sb.getWrappedBlob();
    ????????????????// 通過非weblogic容器中數據源獲得連接的情況
    ????????????????if(wrapBlob instanceof oracle.sql.BLOB){
    ????????????????????oracle.sql.BLOB blob = (oracle.sql.BLOB) wrapBlob;
    ????????????????????OutputStream out = blob.getBinaryOutputStream();
    ????????????????????out.write(getData(fileName));
    ????????????????????out.close();
    ????????????????}
    ????????????????// 使用weblogic的Oracle Thin driver類型連接池,驅動類名:oracle.jdbc.OracleDriver
    ????????????????else if(wrapBlob instanceof weblogic.jdbc.vendor.oracle.OracleThinBlob){
    ????????????????????OracleThinBlob blob = (OracleThinBlob)wrapBlob;
    ????????????????????OutputStream out = blob.getBinaryOutputStream();
    ????????????????????out.write(getData(fileName));
    ????????????????????out.close();
    ????????????????}


    ????????????????// 插入文章數據
    ????????????????fileName = "E:/AAA/" + i + ".java";
    ????????????????SerializableClob cb = (SerializableClob)large.getArticle();
    ????????????????java.sql.Clob wrapClob = cb.getWrappedClob();
    ????????????????// 通過非weblogic容器中數據源獲得連接的情況
    ????????????????if(wrapClob instanceof oracle.sql.CLOB){
    ????????????????????oracle.sql.CLOB clob = (oracle.sql.CLOB) wrapClob;
    ????????????????????Writer writer = clob.getCharacterOutputStream();
    ????????????????????String article = new String(getData(fileName));
    ????????????????????writer.write(article);
    ????????????????????writer.close();
    ????????????????}
    ????????????????// 使用weblogic的Oracle Thin driver類型連接池,驅動類名:oracle.jdbc.OracleDriver
    ????????????????else if(wrapClob instanceof weblogic.jdbc.vendor.oracle.OracleThinClob){
    ????????????????????OracleThinClob clob = (OracleThinClob)wrapClob;
    ????????????????????Writer writer = clob.getCharacterOutputStream();
    ????????????????????String article = new String(getData(fileName));
    ????????????????????writer.write(article);
    ????????????????????writer.close();
    ????????????????}
    ????????????}


    ***************************************************
    采用得是ORACLE9i數據庫,Jboss或Weblogic。
    JDBC采用ORACLE9i自帶的Class12.jar
    -------------
    數據庫結構:
    java代碼:?


    CREATE TABLE SNCPARAMETERS
    (
    ? ID? ? ?NUMBER(19)? ? ? ? ? ? ? ? ? ? ? ? ? ? ?NOT NULL,
    ? SNCID? NUMBER(19),
    ? NAME? ?VARCHAR2(255),
    ? VALUE? CLOB
    )


    --------------
    BO采用xdoclet建立的:
    java代碼:?


    publicclass SNCParameters extends BaseObject
    {

    ? ? /**
    ? ? ?* Returns the id.
    ? ? ?*
    ? ? ?* @return? ? ? long
    ? ? ?* @hibernate.id
    ? ? ?*? ? ? ? ? column = "id"
    ? ? ?*? ? ? ? ? type = "long"
    ? ? ?*? ? ? ? ? generator-class = "native"
    ? ? ?*? ? ? ? ? unsaved-value = "null"
    ? ? ?*/

    ? ? publicLong getId()
    ? ? {
    ? ? ? ? return id;
    ? ? }

    ? ? /**
    ? ? ?*? ? Sets the Id attribute of the SNCParameters object
    ? ? ?*
    ? ? ?* @param? ? id? The new Id value
    ? ? ?*/

    ? ? publicvoid setId(Long id)
    ? ? {
    ? ? ? ? this.id = id;
    ? ? }


    ? ? /**
    ? ? ?* Returns the name.
    ? ? ?*
    ? ? ?* @return? ? ? String
    ? ? ?*
    ? ? ?* @hibernate.property
    ? ? ?*? ? ? ? ? column = "name"
    ? ? ?*? ? ? ? ? type = "string"
    ? ? ?*? ? ? ? ? not-null = "true"
    ? ? ?*? ? ? ? ? unique = "false"
    ? ? ?*/


    ? ? publicString getName()
    ? ? {
    ? ? ? ? return name;
    ? ? }

    ? ? /**
    ? ? ?*? ? Sets the Name attribute of the SNCParameters object
    ? ? ?*
    ? ? ?* @param? ? name? The new Name value
    ? ? ?*/

    ? ? publicvoid setName(String name)
    ? ? {
    ? ? ? ? this.name = name;
    ? ? }

    ? ? /**
    ? ? ?* Returns the sncId.
    ? ? ?*
    ? ? ?* @return? ? ? Long
    ? ? ?*
    ? ? ?* @hibernate.property
    ? ? ?*? ? ? ? ? column = "sncId"
    ? ? ?*? ? ? ? ? type = "long"
    ? ? ?*? ? ? ? ? not-null = "true"
    ? ? ?*? ? ? ? ? unique = "false"
    ? ? ?*/


    ? ? publicLong getSncId()
    ? ? {
    ? ? ? ? return sncId;
    ? ? }

    ? ? /**
    ? ? ?*? ? Sets the SncId attribute of the SNCParameters object
    ? ? ?*
    ? ? ?* @param? ? sncId? The new SncId value
    ? ? ?*/

    ? ? publicvoid setSncId(Long sncId)
    ? ? {
    ? ? ? ? this.sncId = sncId;
    ? ? }

    ? ? /**
    ? ? ?* Returns the values.
    ? ? ?*
    ? ? ?* @return? ? ? Clob
    ? ? ?*
    ? ? ?* @hibernate.property
    ? ? ?*? ? ? ? ? column = "value"
    ? ? ?*? ? ? ? ? type = "clob"
    ? ? ?*? ? ? ? ? not-null = "true"
    ? ? ?*? ? ? ? ? unique = "false"
    ? ? ?*/


    ? ? publicClob getValue()
    ? ? {
    ? ? ? ? return value;
    ? ? }

    ? ? /**
    ? ? ?*? ? Sets the Values attribute of the SNCParameters object
    ? ? ?*
    ? ? ?* @param? ? values? The new Values value
    ? ? ?*/

    ? ? publicvoid setValue(Clob value)
    ? ? {
    ? ? ? ? this.value = value;
    ? ? }
    ? ? privateLong id;
    ? ? privateLong sncId;
    ? ? privateString name;
    ? ? privateClob value;
    ? ? privateString valueString;
    ? ? publicString getValueString()
    ? ? {
    ? ? ? ? return valueString;
    ? ? }
    ? ? ? ? publicvoid setValueString(String? valueString)
    ? ? {
    ? ? ? ? this.valueString = valueString;
    ? ? }
    }



    注:valueString并不映射到數據庫的CLOB字段,只是方便需要使用這個BO的人用GET、SET 處理這個巨長的CLOB字段
    ------------
    xdocLet生成的XML文件:
    java代碼:?


    <?xml version="1.0"?>

    <!DOCTYPE hibernate-mapping PUBLIC
    ? ? "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    ? ? "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

    <hibernate-mapping>
    ? ? <class
    ? ? ? ? name="com.idncn.mc.bo.SNCParameters"
    ? ? ? ? table="SNCParameters"
    ? ? ? ? dynamic-update="false"
    ? ? ? ? dynamic-insert="false"
    ? ? >

    ? ? ? ? <id
    ? ? ? ? ? ? name="id"
    ? ? ? ? ? ? column="id"
    ? ? ? ? ? ? type="long"
    ? ? ? ? ? ? unsaved-value="null"
    ? ? ? ? >
    ? ? ? ? ? ? <generator class="native">
    ? ? ? ? ? ? </generator>
    ? ? ? ? </id>

    ? ? ? ? <property
    ? ? ? ? ? ? name="name"
    ? ? ? ? ? ? type="string"
    ? ? ? ? ? ? update="true"
    ? ? ? ? ? ? insert="true"
    ? ? ? ? ? ? column="name"
    ? ? ? ? ? ? not-null="true"
    ? ? ? ? ? ? unique="false"
    ? ? ? ? />

    ? ? ? ? <property
    ? ? ? ? ? ? name="sncId"
    ? ? ? ? ? ? type="long"
    ? ? ? ? ? ? update="true"
    ? ? ? ? ? ? insert="true"
    ? ? ? ? ? ? column="sncId"
    ? ? ? ? ? ? not-null="true"
    ? ? ? ? ? ? unique="false"
    ? ? ? ? />

    ? ? ? ? <property
    ? ? ? ? ? ? name="value"
    ? ? ? ? ? ? type="clob"
    ? ? ? ? ? ? update="true"
    ? ? ? ? ? ? insert="true"
    ? ? ? ? ? ? column="value"
    ? ? ? ? ? ? not-null="true"
    ? ? ? ? ? ? unique="false"
    ? ? ? ? />
    ? ? </class>

    </hibernate-mapping>


    --------------------
    insert的代碼:
    java代碼:?


    ? ? publicList batchAddSncParameters(List sncParametersList, Long sncId)throws DbAccessException
    ? ? {
    ? ? ? ? logger.enterMethod();
    ? ? ? ? List ret = newArrayList();
    ? ? ? ? try
    ? ? ? ? {
    ? ? ? ? ? ? sess = getSession();
    ? ? ? ? ? ? if(sncParametersList != null && sncParametersList.size() > 0)
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? for(int i = 0; i < sncParametersList.size(); i++)
    ? ? ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? ? ? SNCParameters cp = (SNCParameters) sncParametersList.get(i);
    ? ? ? ? ? ? ? ? ? ? long newId = -1;
    ? ? ? ? ? ? ? ? ? ? if(cp != null)
    ? ? ? ? ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? ? ? ? ? SNCParameters cpNew = new SNCParameters();
    ? ? ? ? ? ? ? ? ? ? ? ? cpNew.setSncId(sncId);
    ? ? ? ? ? ? ? ? ? ? ? ? cpNew.setName(cp.getName());
    ? ? ? ? ? ? ? ? ? ? ? ? cpNew.setValue(Hibernate.createClob(" "));
    ? ? ? ? ? ? ? ? ? ? ? ? newId = ((Long) sess.save(cpNew)).longValue();
    ? ? ? ? ? ? ? ? ? ? ? ? sess.flush();

    ? ? ? ? ? ? ? ? ? ? ? ? sess.refresh(cpNew, LockMode.UPGRADE);
    ? ? ? ? ? ? ? ? ? ? ? ? String content = cp.getValueString();

    ? ? ? ? ? ? ? ? ? ? ? ? String appserver = System.getProperty("appserver", "jboss");
    ? ? ? ? ? ? ? ? ? ? ? ? if(!appserver.equalsIgnoreCase("jboss"))
    ? ? ? ? ? ? ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? //weblogic
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? OracleThinClob clob = (OracleThinClob) cpNew.getValue();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? java.io.Writer pw = clob.getCharacterOutputStream();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? pw.write(content);
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? pw.flush();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? pw.close();
    ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? ? ? ? ? else
    ? ? ? ? ? ? ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? //jboss
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? oracle.sql.CLOB clob = (oracle.sql.CLOB) cpNew.getValue();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? java.io.Writer pw = clob.getCharacterOutputStream();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? pw.write(content);
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? pw.flush();
    ? ? ? ? ? ? ? ? ? ? ? ? ? ? pw.close();
    ? ? ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? ? ? ? ? ret.add(newLong(newId));
    ? ? ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? }
    ? ? ? ? }
    ? ? ? ? catch(Exception e)
    ? ? ? ? {
    ? ? ? ? ? ? logger.error(e);
    ? ? ? ? ? ? ErrorReason errorReason = new ErrorReason(ErrorReason.INSERT_OBJECT_FAILED_REASON);
    ? ? ? ? ? ? throw new DbAccessException(DbAccessException.DBA_OPERATE_EXCEPTION, errorReason);
    ? ? ? ? }
    ? ? ? ? finally
    ? ? ? ? {
    ? ? ? ? ? ? closeSession(sess);
    ? ? ? ? ? ? logger.exitMethod();
    ? ? ? ? }
    ? ? ? ? return ret;
    ? ? }


    -----------------
    注:Weblogic必須使用weblogic.jdbc.vendor.oracle.OracleThinClob
    ---------------------
    讀取CLOB字段:
    java代碼:?


    ? ? publicList selectSncParametersBySncId(long sncId)throws DbAccessException
    ? ? {
    ? ? ? ? logger.enterMethod();
    ? ? ? ? List ret = newArrayList();
    ? ? ? ? try
    ? ? ? ? {
    ? ? ? ? ? ? sess = getSession();
    ? ? ? ? ? ? String query = "select cp from cp in class com.idncn.mc.bo.SNCParameters where cp.sncId = ?";
    ? ? ? ? ? ? logger.debug("SQL=" + query);
    ? ? ? ? ? ? List iter = sess.find(query, newLong(sncId), Hibernate.LONG);
    ? ? ? ? ? ? for(int i = 0; i < iter.size(); i++)
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? SNCParameters newCp = new SNCParameters();
    ? ? ? ? ? ? ? ? SNCParameters cp = (SNCParameters)(iter.get(i));
    ? ? ? ? ? ? ? ? logger.debug("after fetch:" + cp);
    ? ? ? ? ? ? ? ? newCp.setId(cp.getId());
    ? ? ? ? ? ? ? ? newCp.setSncId(cp.getSncId());
    ? ? ? ? ? ? ? ? newCp.setName(cp.getName());
    ? ? ? ? ? ? ? ? java.sql.Clob clob = cp.getValue();
    ? ? ? ? ? ? ? ? if(clob != null)
    ? ? ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? ? ? logger.debug("b===" + clob.length());
    ? ? ? ? ? ? ? ? ? ? String b = clob.getSubString(1, (int) clob.length());
    ? ? ? ? ? ? ? ? ? ? //logger.debug("b==="+b);
    ? ? ? ? ? ? ? ? ? ? newCp.setValueString(b);
    ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? ? ? ret.add(newCp);
    ? ? ? ? ? ? }
    ? ? ? ? }
    ? ? ? ? catch(Exception e)
    ? ? ? ? {
    ? ? ? ? ? ? logger.error(e);
    ? ? ? ? ? ? ErrorReason errorReason = new ErrorReason(ErrorReason.SELECT_FAILED_REASON);
    ? ? ? ? ? ? throw new DbAccessException(DbAccessException.DBA_OPERATE_EXCEPTION, errorReason);
    ? ? ? ? }
    ? ? ? ? finally
    ? ? ? ? {
    ? ? ? ? ? ? closeSession(sess);
    ? ? ? ? ? ? logger.exitMethod();
    ? ? ? ? }
    ? ? ? ? return ret;
    ? ? }


    ---------------
    更新這個字段的代碼:
    java代碼:?


    ? ? publicvoid updateSncParameters(SNCParameters newParam)throws DbAccessException
    ? ? {
    ? ? ? ? logger.enterMethod();
    ? ? ? ? try
    ? ? ? ? {
    ? ? ? ? ? ? sess = getSession();

    ? ? ? ? ? ? Long id = newParam.getId();
    ? ? ? ? ? ? SNCParameters pp = (SNCParameters) sess.load(SNCParameters.class, id, net.sf.hibernate.LockMode.UPGRADE);

    ? ? ? ? ? ? pp.setSncId(newParam.getSncId());
    ? ? ? ? ? ? pp.setName(newParam.getName());
    ? ? ? ? ? ? pp.setId(newParam.getId());

    ? ? ? ? ? ? String newValue = newParam.getValueString();
    ? ? ? ? ? ? logger.debug("Update Length =" + newValue.length());

    ? ? ? ? ? ? String appserver = System.getProperty("appserver", "jboss");
    ? ? ? ? ? ? logger.debug("appserver: " + appserver);
    ? ? ? ? ? ? if(!appserver.equalsIgnoreCase("jboss"))
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? //weblogic
    ? ? ? ? ? ? ? ? OracleThinClob clob = (OracleThinClob) pp.getValue();
    ? ? ? ? ? ? ? ? if(pp != null)
    ? ? ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? ? ? java.io.Writer pw = clob.getCharacterOutputStream();
    ? ? ? ? ? ? ? ? ? ? pw.write(newValue);
    ? ? ? ? ? ? ? ? ? ? pw.flush();
    ? ? ? ? ? ? ? ? ? ? pw.close();
    ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? }
    ? ? ? ? ? ? else
    ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? //jboss
    ? ? ? ? ? ? ? ? oracle.sql.CLOB clob = (oracle.sql.CLOB) pp.getValue();
    ? ? ? ? ? ? ? ? if(pp != null)
    ? ? ? ? ? ? ? ? {
    ? ? ? ? ? ? ? ? ? ? java.io.Writer pw = clob.getCharacterOutputStream();
    ? ? ? ? ? ? ? ? ? ? pw.write(newValue);
    ? ? ? ? ? ? ? ? ? ? pw.flush();
    ? ? ? ? ? ? ? ? ? ? pw.close();
    ? ? ? ? ? ? ? ? }
    ? ? ? ? ? ? }
    ? ? ? ? }
    ? ? ? ? catch(Exception e)
    ? ? ? ? {
    ? ? ? ? ? ? logger.error(e);
    ? ? ? ? ? ? ErrorReason errorReason = new ErrorReason(ErrorReason.UPDATE_OBJECT_FAILED_REASON);
    ? ? ? ? ? ? throw new DbAccessException(DbAccessException.DBA_OPERATE_EXCEPTION, errorReason);
    ? ? ? ? }
    ? ? ? ? finally
    ? ? ? ? {
    ? ? ? ? ? ? closeSession(sess);
    ? ? ? ? ? ? logger.exitMethod();
    ? ? ? ? }
    ? ? }


    posted on 2006-07-11 11:07 船長 閱讀(1802) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 亚洲一区精品中文字幕| 今天免费中文字幕视频| 亚洲自偷自拍另类图片二区| 免费一级毛片清高播放| 国产高清免费视频| 中文字幕免费人成乱码中国| 亚洲av最新在线观看网址| 亚洲制服丝袜在线播放| 亚洲精品无码永久中文字幕| 又粗又硬又黄又爽的免费视频| 四虎永久在线精品免费网址| 99久久人妻精品免费二区| 中文永久免费观看网站| 又硬又粗又长又爽免费看 | 亚洲中文字幕无码爆乳| 亚洲VA中文字幕无码毛片| 亚洲精品成人在线| 全黄性性激高免费视频| 精品久久洲久久久久护士免费| 人成午夜免费视频在线观看| 最近免费中文字幕高清大全| 成人电影在线免费观看| 丁香花在线观看免费观看图片| 免费福利在线观看| 美女黄色毛片免费看| 亚洲AV第一成肉网| 久久久久亚洲国产AV麻豆| 亚洲国产成人综合精品| 亚洲爆乳AAA无码专区| 亚洲日韩精品A∨片无码加勒比| 久久精品国产亚洲av麻豆蜜芽| 91亚洲国产在人线播放午夜 | 日韩a毛片免费观看| 亚洲国产成人AV在线播放| 亚洲午夜一区二区三区| 亚洲一级黄色大片| 亚洲妇女熟BBW| 亚洲精品理论电影在线观看| 亚洲第一第二第三第四第五第六| 亚洲精品第一国产综合亚AV| 亚洲AV成人精品日韩一区 |