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

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

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

    風之力

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      19 Posts :: 2 Stories :: 18 Comments :: 0 Trackbacks

    做了個簡單的通告管理,在本機測試時數據量比較小。最開始用的時varchar2到2000,之后用hibernate中的text類型,對應數據庫中的Clob類型。當數據量小于4000時,可以直接使用setObject()插入數據庫。當數據量大于4000時。報錯:socket write error。
    查找了一些資料,說當數據量超過4000時,應該使用流方式操作。看到頭昏昏,煩都煩死了......
    最后發現Spring封裝了對lob數據的操作,可以直接使用jdbcTemple操作lob數據。
    當使用MySql、MSSQL、Oracle 10g時,使用DefaultLobHandler;使用Oracle 9i時使用OracleLobHandler。
    示例代碼:【轉值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,否則報錯:要求使用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驅動版本很多,要求使用正確的驅動。當驅動版本錯誤時,報錯:無法釋放LobHandler;無法關閉Writer;無法從套接字讀取更多的信息。執行插入操作,但是Clob類型數據為空。
    posted on 2006-11-08 16:20 風之力 閱讀(5575) 評論(4)  編輯  收藏 所屬分類: java
    主站蜘蛛池模板: 亚洲国产精品久久久久婷婷老年| 四虎永久精品免费观看| 国产v亚洲v天堂无码网站| 丁香六月婷婷精品免费观看| 伊人久久亚洲综合影院| 添bbb免费观看高清视频| 亚洲精品成人a在线观看| www成人免费观看网站| 亚洲中文字幕无码不卡电影| 精品免费久久久久国产一区 | 色妞www精品视频免费看| 一本久久综合亚洲鲁鲁五月天| 黄色a三级三级三级免费看| 一本色道久久88亚洲综合| www成人免费视频| 亚洲人成在线影院| 成人免费a级毛片| 污污视频免费观看网站| 亚洲精品久久无码av片俺去也| 久久不见久久见免费影院| 亚洲国产精品综合一区在线| www.999精品视频观看免费| 亚洲av成人无码网站…| www国产亚洲精品久久久日本| 国产精品极品美女自在线观看免费| 亚洲无线观看国产精品| 98精品全国免费观看视频| 在线亚洲高清揄拍自拍一品区| 国产成人无码区免费A∨视频网站| 亚欧洲精品在线视频免费观看| 亚洲av片劲爆在线观看| 巨胸喷奶水视频www网免费| xvideos永久免费入口| 久久亚洲精品无码aⅴ大香| 午夜视频免费观看| 国产猛男猛女超爽免费视频| 亚洲国产精品白丝在线观看| 免费萌白酱国产一区二区| 久久精品人成免费| 韩国亚洲伊人久久综合影院| 亚洲AV无码一区东京热久久|