處理大數(shù)據(jù)對象1 clob_第1頁
處理大數(shù)據(jù)對象1 clob_第2頁
處理大數(shù)據(jù)對象1 clob_第3頁
處理大數(shù)據(jù)對象1 clob_第4頁
處理大數(shù)據(jù)對象1 clob_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

處理大數(shù)據(jù)對象(1)—處理CLOB數(shù)據(jù)趙翔宇大對象處理主要指的是CLOB和BLOB兩種類型的字段,在CLOB中可以存儲海量文字,例如,存儲一部《三國演義》或者是《紅樓夢》等。在BLOB中可以存儲二進(jìn)制數(shù)據(jù),如圖片、電影等等,如果在程序中要想處理這樣的大對象操作,則必須使用PreparedStatement完成,所有的內(nèi)容要通過IO流的方式從大文本字段中保存和讀取。PreparedStatement提供了如下方法,專門用于寫入大對象數(shù)據(jù)大對象數(shù)據(jù)設(shè)置到數(shù)據(jù)庫中后,在查詢時(shí)就需要使用ResultSet將其讀取進(jìn)來,在ResultSet中提供了如下的方法可以讀取出大對象數(shù)據(jù)以上方法實(shí)際分為兩組,Clob和AsciiStream一般都返回大文本,而Blob和BinaryStream一般都返回二進(jìn)制數(shù)據(jù)。下面分別來看這些方法的操作,而Clob和Blob也將在操作時(shí)為大家介紹。處理CLOB數(shù)據(jù)CLOB表示大文本數(shù)據(jù),在MySQL中提供了LONGTEXT表示大文本數(shù)據(jù),此字段的最大保存數(shù)據(jù)量為4G。例如,下面有如下的數(shù)據(jù)庫創(chuàng)建腳本:DROPTABLEuserclob;CREATETABLEuserclob( id INT AUTO_INCREMENTPRIMARYKEY, name VARCHAR(30) NOTNULL, note LONGTEXT);下面向此表中插入數(shù)據(jù),其中對于note內(nèi)容,使用如下圖所示的文本表示。此文本大小是31KB保存在d盤中,文件名稱是xlh.txt實(shí)例:寫入大文本數(shù)據(jù)publicclassInsertDemo{ //定義數(shù)據(jù)庫驅(qū)動(dòng)地址

publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver"; //定義數(shù)據(jù)庫鏈接地址

publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/zxy"; //定義數(shù)據(jù)庫連接用戶名

publicstaticfinalStringDBUSER="root"; //定義數(shù)據(jù)庫連接密碼

publicstaticfinalStringDBPASS="mysqladmin"; publicstaticvoidmain(String[]args){ Connectioncon=null; PreparedStatementpstmt=null; InputStreaminput=null; Stringname="趙翔宇"; Stringsql="INSERTINTOuserclob(name,note)VALUES(?,?)"; try{ Class.forName(DBDRIVER); con=DriverManager.getConnection(DBURL,DBUSER,DBPASS); pstmt=con.prepareStatement(sql); Filef=newFile("d:"+File.separator+"xlh.txt"); input=newFileInputStream(f);

pstmt.setString(1,name); pstmt.setAsciiStream(2,input,(int)f.length()); pstmt.executeUpdate(); pstmt.close(); con.close(); }catch(ClassNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(FileNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } }}因?yàn)閮?nèi)容保存在文件中,所以使用FileInputStream類將文本文件讀取進(jìn)來,之后直接通過PreparedStatement對象將其寫入到對應(yīng)的大文本字段中。寫入完成之后,下面直接使用ResultSet將其讀取進(jìn)來,因?yàn)閷懭霑r(shí)是按照輸入流的方式寫入的,所以此時(shí)也需要按照輸入流的方式讀取進(jìn)來。實(shí)例:讀取大文本字段publicclassInsertDemo{ //定義數(shù)據(jù)庫驅(qū)動(dòng)地址

publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver"; //定義數(shù)據(jù)庫鏈接地址

publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/zxy"; //定義數(shù)據(jù)庫連接用戶名

publicstaticfinalStringDBUSER="root"; //定義數(shù)據(jù)庫連接密碼

publicstaticfinalStringDBPASS="mysqladmin"; publicstaticvoidmain(String[]args){ Connectioncon=null; PreparedStatementpstmt=null; InputStreaminput=null; ResultSetrs=null; intid=1; Stringsql="SELECTname,noteFROMuserclobWHEREid=?"; try{ Class.forName(DBDRIVER); con=DriverManager.getConnection(DBURL,DBUSER,DBPASS); pstmt=con.prepareStatement(sql); pstmt.setInt(1,id);

rs=pstmt.executeQuery(); if(rs.next()){ Stringname=rs.getString(1); StringBuffernote=newStringBuffer(); System.out.println("姓名:"+name); input=rs.getAsciiStream(2); Scannerscan=newScanner(input); scan.useDelimiter("\n"); while(scan.hasNext()){ note.append(scan.next()).append("\n"); } System.out.println("內(nèi)容:"+note.toString()); input.close(); pstmt.close(); con.close(); } }catch(ClassNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }

}}程序運(yùn)行結(jié)果(部分):姓名:趙翔宇內(nèi)容:石村,位于蒼莽山脈中,四周高峰大壑,茫茫群山巍峨。清晨,朝霞燦燦,仿若碎金一般灑落,沐浴在人身上暖洋洋。一群孩子,從四五歲到十幾歲不等,能有數(shù)十人,在村前的空地上迎……………….以上程序中,為了操作方便,使用了Scanner類接收全部的輸入內(nèi)容。由于在文本保存時(shí)存在換行,所以使用“\n”作為分隔符,之后通過循環(huán)的方式不斷的把內(nèi)容讀取出來并將內(nèi)容保存在StringBuffer中。以上的做法是將發(fā)文本數(shù)據(jù)內(nèi)容直接通過ResultSet讀取進(jìn)來,當(dāng)然也可以使用ResultSet中提供的getClob()方法,將全部的內(nèi)容變?yōu)镃lob對象的內(nèi)容。直接使用Clob可以方便的讀取大文本的數(shù)據(jù),也可以對這些文本數(shù)據(jù)進(jìn)行一些簡單的操作,如截取指定長度的文本等。Clob的常用方法如下所示:實(shí)例:使用Clob讀取內(nèi)容publicclassInsertDemo{ //定義數(shù)據(jù)庫驅(qū)動(dòng)地址

publicstaticfinalStringDBDRIVER="org.gjt.mm.mysql.Driver"; //定義數(shù)據(jù)庫鏈接地址

publicstaticfinalStringDBURL="jdbc:mysql://localhost:3306/zxy"; //定義數(shù)據(jù)庫連接用戶名

publicstaticfinalStringDBUSER="root"; //定義數(shù)據(jù)庫連接密碼

publicstaticfinalStringDBPASS="mysqladmin"; publicstaticvoidmain(String[]args){ Connectioncon=null; PreparedStatementpstmt=null; InputStreaminput=null; ResultSetrs=null; intid=1; Stringsql="SELECTname,noteFROMuserclobWHEREid=?"; try{ Class.forName(DBDRIVER); con=DriverManager.getConnection(DBURL,DBUSER,DBPASS); pstmt=con.prepareStatement(sql); pstmt.setInt(1,id);

rs=pstmt.executeQuery(); if(rs.next()){ Stringname=rs.getString(1); Clobclob=rs.getClob(2); Stringnote=clob.getSubString(1,(int)clob.length()); System.out.println("姓名:"+name); System.out.println("內(nèi)容:"+note); clob.truncate(100); System.out.println("部分度取內(nèi)容:"+clob.getSubString(1,(int)clob.length())); pstmt.close(); con.close(); } }catch(ClassNotFoundExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }

}}

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論