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

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

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

    風(fēng)之力

    BlogJava 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
      19 Posts :: 2 Stories :: 18 Comments :: 0 Trackbacks

    做了個(gè)簡(jiǎn)單的通告管理,在本機(jī)測(cè)試時(shí)數(shù)據(jù)量比較小。最開(kāi)始用的時(shí)varchar2到2000,之后用hibernate中的text類型,對(duì)應(yīng)數(shù)據(jù)庫(kù)中的Clob類型。當(dāng)數(shù)據(jù)量小于4000時(shí),可以直接使用setObject()插入數(shù)據(jù)庫(kù)。當(dāng)數(shù)據(jù)量大于4000時(shí)。報(bào)錯(cuò):socket write error。
    查找了一些資料,說(shuō)當(dāng)數(shù)據(jù)量超過(guò)4000時(shí),應(yīng)該使用流方式操作。看到頭昏昏,煩都煩死了......
    最后發(fā)現(xiàn)Spring封裝了對(duì)lob數(shù)據(jù)的操作,可以直接使用jdbcTemple操作lob數(shù)據(jù)。
    當(dāng)使用MySql、MSSQL、Oracle 10g時(shí),使用DefaultLobHandler;使用Oracle 9i時(shí)使用OracleLobHandler。
    示例代碼:【轉(zhuǎn)值javaWorld】

    ?1?????????final?File?binaryFile?=?new?File("c:\\workspace\\wish.jpg" );
    ?2?????????final?File?txtFile?=?new?File("c:\\workspace\\test.txt"
    );
    ?3?
    ???????
    ?4?????????final?InputStream?is?=?new
    ?FileInputStream(binaryFile);
    ?5?????????final?Reader?reader?=?new
    ?FileReader(txtFile);
    ?6?
    ???????
    ?7?????????JdbcTemplate?jdbcTemplate?=?new
    ?JdbcTemplate(dataSource);
    ?8?
    ???????
    ?9?????????final?LobHandler?lobHandler?=?new
    ?DefaultLobHandler();
    10?
    ???????
    11?????????jdbcTemplate.execute("INSERT?INTO?test?(txt,?image)?VALUES(?,??)"
    ,
    12??????????????????????new
    ?AbstractLobCreatingPreparedStatementCallback(lobHandler)?{
    13?????????????????????????protected?void
    ?setValues(PreparedStatement?pstmt,?LobCreator?lobCreator)
    14????????????????????????????????????????????????????????????throws
    ?SQLException,?DataAccessException?{
    15?????????????????????????????lobCreator.setClobAsCharacterStream(pstmt,?1,?reader,?(int
    )?txtFile.length());
    16?????????????????????????????lobCreator.setBlobAsBinaryStream(pstmt,?2,?is,?(int
    )?binaryFile.length());
    17?
    ????????????????????????}
    18?
    ?????????????????????});
    19?
    ???????
    20?
    ????????reader.close();
    21?
    ????????is.close();
    22?

    讀取代碼:

    ?1?????????final?Writer?writer?=?new?FileWriter("c:\\workspace\\test_bak.txt" );
    ?2?????????final?OutputStream?os?=?new?FileOutputStream(new?File("c:\\workspace\\wish_bak.jpg"
    ));
    ?3?
    ???????
    ?4?????????jdbcTemplate.query("SELECT?txt,image?FROM?test?WHERE?id?=??"
    ,
    ?5?????????????????new?Object[]?{new?Integer(1
    )},
    ?6?????????????????new
    ?AbstractLobStreamingResultSetExtractor()?{
    ?7?????????????????????protected?void?streamData(ResultSet?rs)?throws
    ?SQLException,?IOException,?DataAccessException?{
    ?8?????????????????????????FileCopyUtils.copy(lobHandler.getClobAsCharacterStream(rs,?1
    ),?writer);
    ?9?????????????????????????FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs,?2
    ),?os);
    10?
    ????????????????????}
    11?
    ?????????????????});
    12?
    ????????writer.close();
    13?
    ????????os.close();
    14?

    15?
    備注1:OracleLobHandler要求注入CommonsDbcpNativeJdbcExtractor,否則報(bào)錯(cuò):要求使用OracleConnection,不可以使用Dbcp連接池。
    1 ???? < bean?id = " lobHandler " ? class = " org.springframework.jdbc.support.lob.OracleLobHandler " >
    2 ???? < property?name = " nativeJdbcExtractor " >
    3 ??????? < bean? class = " org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor " />
    4 ??? </ property >
    5 ??? </ bean >
    備注2:Oracle驅(qū)動(dòng)版本很多,要求使用正確的驅(qū)動(dòng)。當(dāng)驅(qū)動(dòng)版本錯(cuò)誤時(shí),報(bào)錯(cuò):無(wú)法釋放LobHandler;無(wú)法關(guān)閉Writer;無(wú)法從套接字讀取更多的信息。執(zhí)行插入操作,但是Clob類型數(shù)據(jù)為空。
    posted on 2006-11-08 16:20 風(fēng)之力 閱讀(5575) 評(píng)論(4)  編輯  收藏 所屬分類: java

    Feedback

    # re: spring下lob數(shù)據(jù)處理【原創(chuàng)】 2008-08-01 15:29 gyhgc
    同時(shí)讀取多個(gè)圖片文件呢,如何處理呢?
    String name = rs.getString(2);
    final OutputStream os = new FileOutputStream(new File(path+name));
    FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs, 1), os);
    list.add(name);
    os.close();
    while(rs.next()){
    name = rs.getString(2);
    final OutputStream os1 = new FileOutputStream(new File(path+name));
    FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs, 1), os1);
    list.add(name);
    os1.close();

    }
    直接寫(xiě)while(rs.next()) 第一個(gè)圖片取不到,如何寫(xiě)才正確呢?  回復(fù)  更多評(píng)論
      

    # re: spring下lob數(shù)據(jù)處理【原創(chuàng)】 2008-08-04 10:14 風(fēng)之力
    @gyhgc
    不是很明白你的意思,操作應(yīng)該都是一樣的
    你是指不要上面那段,直接寫(xiě)
    while(rs.next()){
    name = rs.getString(2);
    final OutputStream os1 = new FileOutputStream(new File(path+name));
    FileCopyUtils.copy(lobHandler.getBlobAsBinaryStream(rs, 1), os1);
    list.add(name);
    os1.close();
    }
    取不到第一張圖片?
      回復(fù)  更多評(píng)論
      

    # re: spring下lob數(shù)據(jù)處理【原創(chuàng)】 2008-08-04 11:10 gyhgc
    是的,就是rs的指針已經(jīng)指向了第一行的位置。rs.next()只能從第二行開(kāi)始讀取了。  回復(fù)  更多評(píng)論
      

    # re: spring下lob數(shù)據(jù)處理【原創(chuàng)】 2008-08-05 08:57 風(fēng)之力
    @gyhgc
    AbstractLobStreamingResultSetExtractor的
    public final Object extractData(ResultSet rs) throws SQLException, DataAccessException {
    if (!rs.next()) {
    handleNoRowFound();
    }
    else {
    try {
    streamData(rs);
    if (rs.next()) {
    handleMultipleRowsFound();
    }
    }
    catch (IOException ex) {
    throw new LobRetrievalFailureException("Couldn't stream LOB content", ex);
    }
    }
    return null;
    }
    是先做了一次rs.next()的,所以rs的指針是指到第一行的
    你可以do{}while(rs.next())的嘛......
      回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 国产成人亚洲综合网站不卡| 歪歪漫画在线观看官网免费阅读 | 亚洲黄网站wwwwww| 日本成人在线免费观看 | 亚洲人成影院在线| 亚洲国产精品日韩专区AV| 四虎永久在线观看免费网站网址| 国产精品免费αv视频| 亚洲爆乳无码精品AAA片蜜桃| 亚洲黑人嫩小videos| 久久久久亚洲AV无码专区网站| 成人免费午夜视频| 中文字幕亚洲免费无线观看日本| 中文字幕免费在线看线人动作大片 | 久久精品国产亚洲av影院| 久久精品亚洲男人的天堂| 国产成人一区二区三区免费视频 | 亚洲AV成人无码久久精品老人 | 国产精品亚洲а∨天堂2021| ass亚洲**毛茸茸pics| 精品亚洲成a人片在线观看| 亚洲无人区一区二区三区| 亚洲AV无码不卡在线观看下载| 在线观看成人免费| 成人免费a级毛片| 18禁免费无码无遮挡不卡网站 | 免费成人av电影| 国产特级淫片免费看| 日本大片在线看黄a∨免费| 性色av免费观看| 成人免费午夜视频| 大学生美女毛片免费视频| 午夜视频在线观看免费完整版| 国产免费久久精品99re丫y| 狼群影院在线观看免费观看直播| 久久青草免费91线频观看站街| 97无码人妻福利免费公开在线视频 | 久久久久女教师免费一区| yellow免费网站| 在线观看免费视频网站色| 人妻在线日韩免费视频|