JDBC 2.0比1.0有了一些不同,體現(xiàn)在四個比較明顯的方面:
          1>. ResutlSet對象中的Cursor能夠自由上下移動
          2>. 能直接使用Java程序語言來更新DB表里的內(nèi)容,而不需要額外寫SQL語法
          3>. 可以一次傳送許多SQL語句到DB執(zhí)行----Batch
          4>. 新增2個數(shù)據(jù)類型(BLOB和CLOB)
          ?? 我們知道在JDBC 1.0時,只要用 connection.createStatement()就能取得Statement()對象.不過在2.0中多的createStatement()
          多了兩個參數(shù)值,需要我們自己來定義它.
          public Statement createStatement(int resultSetType,
          ???????????????????????????????? int resultSetConcurrency)throws SQLException
          ?? 第一個參數(shù)resultSetType用來設(shè)定ResultSet對象中的光標(biāo)是否可以自由上下移動,它的值有三種,TYPE_FORWARD_ONLY,TYPE_SCROLL_SENSITIVE,
          TYPE_SCROLL_INSENSITIVE.若為TYPE_FORWARD_ONLY就表示和1.0一樣只能用next()方法;然后后兩者可以讓Cursor隨便的自由移動,不過,
          它們兩者最大的區(qū)別在于:當(dāng)ResutlSet中的值有改變時,TYPE_SCROLL_SENSITIVE能取得修改后的值,而TYPE_SCROLL_INSENSITIVE則不能.
          ? 第而個參數(shù)resultSetConcurrentcy,主要是設(shè)定ResultSet對象是只讀(read-only)還是可以改變的(updateable),它可能的值有兩種,
          CONCUR_READ_ONLY或者是CONCUR_UPDATE.若設(shè)置為CONCUR_READ_ONLY,ResultSet對象和1.0一樣;若為CONCUR_UPDATEABLE,那么就可以用
          ResultSet對象執(zhí)行數(shù)據(jù)庫的修改,增加和移除功能.for example:
          先看功能和1.0一樣的寫法:
          Statement stmt=con.createStatement(ResultSet.TYPE_FORWARD_ONLY,
          ?????????????????????????????????? ResultSet.CONCUR_READ_ONLY);
          RestultSet rs=stmt.executeQuery("select ename,empno from emp");
          while(rs.next())
          {
          ?? String name=rs.getString("ename");
          ?? int empno=rs.getInt("empno");
          ?? System.out.println("name="+name+","+"number="+empno);
          }
          輸出結(jié)果為:
          name=feiyang,number=1190
          name=jack,?? number=1230
          name=BillGates number=12
          ...........
          再看看下面這個:
          Statement stmt=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
          ?????????????????????????????????? ResultSet.CONCUR_READ_ONLY);
          RestultSet rs=stmt.executeQuery("select ename,empno from emp");
          rs.afterLast();
          while(rs.previous())
          {
          ?? String name=rs.getString("ename");
          ?? int empno=rs.getInt("empno");
          ?? System.out.println("name="+name+","+"number="+empno);
          }
          輸出結(jié)果為:
          name=BillGates number=12
          name=jack,?? number=1230
          name=feiyang,number=1190
          .............
          這和上面第一有點(diǎn)不同的是順序顛倒了,這是因?yàn)槲覀兪褂昧藃s.afterLast()這個方法.其實(shí)2.0中還有很多方法,如下:
          rs.absolute(-1); //表示cursor在最后一筆數(shù)據(jù),即 rs.last()
          rs.absolute(1);? //表示cursor在第一筆數(shù)據(jù),即rs.first()
          rs.absolute(n);? //表示cursor在第N筆數(shù)據(jù)
          假使我們目前有1000筆數(shù)據(jù),取得第997筆
          rs.absolute(-4);
          還有一個方法和absolute很相像,那就是relative(),
          rs.absolute(5); //表示第五筆數(shù)據(jù)
          ......
          rs.relative(-3);? //表示cursor目前在第二筆數(shù)據(jù)
          .......
          rs.relative(1);? //cursor目前在第三筆數(shù)據(jù)
          看看怎么用ResultSet對象執(zhí)行更新數(shù)據(jù)庫動作
          ?? 要讓ResultSet對象執(zhí)行更新數(shù)據(jù)庫的動作,首先在聲明Statement對象時,參數(shù)必須設(shè)置為TYPE_SCROLL_SENSITIVE和
          CUNCOR_UPDATEABLE.
          Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
          ????????????????????????????????? ResultSet.CONCUR_UPDATEABLE);
          ResultSet rs=stmt.executeQuery("select ename,empno from emp);
          rs.last();
          rs.updateInt("empno",2230);
          rs.cancelRowUpdates();
          rs.updateInt("empno",1213);
          rs.updateRow();
          新增數(shù)據(jù)到數(shù)據(jù)庫
          Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
          ????????????????????????????????? ResultSet.CONCUR_UPDATEABLE);
          ResultSet rs=stmt.executeQuery("select * from emp);
          rs.moveToInsertRow();
          rs.updateInt("empno",2230);
          rs.updateString("ename","feiyang");
          rs.updateString("job","clerk");
          rs.updateFloat("sal",123456.5);
          rs.insertRow();
          刪除數(shù)據(jù)
          Statement stmt=con.createStatment(RestultSet.TYPE_SCROLL_SENSITIVE,
          ????????????????????????????????? ResultSet.CONCUR_UPDATEABLE);
          ResultSet rs=stmt.executeQuery("select * from emp);
          rs.absolute(4);
          rs.deleteRow();
          依次執(zhí)行多條SQL語句
          Statement stmt=con.createStatment();
          int[] rows;
          stmt.addBatch("insert into emp values('feiyang','123456')");
          stmt.addBatch("insert into offcie values('employee','Shanghai')");
          rows=stmt.executeBatch();
          當(dāng)執(zhí)行大量數(shù)據(jù)的時候?yàn)榱藬?shù)據(jù)的完整性,建議使用Transaction
          eg:
          con.setAutoCommit(false);
          Statement stmt=con.createStatement();
          int[] rows;
          stmt.addBatch("1...........");
          stmt.addBatch("2...........");
          stmt.addBatch("3...........");
          stmt.addBatch("4...........");
          stmt.addBatch("5...........");
          stmt.addBatch("6...........");
          rows=stmt.executeBatch();
          con.commit();
          在JDBC2.0中新增加BLOB和CLOB兩個數(shù)據(jù)類型
          BOLB指的是二進(jìn)制大型對象(Binary Large Object),CLOB指的是字符大型對象(Character Large Object).它們用來處理大型
          的數(shù)據(jù)類型,他們分別代表大量的二進(jìn)制數(shù)據(jù)和文字?jǐn)?shù)據(jù).

          posted @ 2006-06-28 09:46 多力宇揚(yáng) 閱讀(435) | 評論 (0)編輯 收藏

          checkbox全選實(shí)現(xiàn)
          ?
          function CheckOthers(form)
          {
          ??? for (var i=0;i<form.elements.length;i++)
          ??? {
          ??????? var e = form.elements[i];
          //??????? if (e.name != 'chkall')
          ??????????? if (e.checked==false)
          ??????????? {
          ??????????????? e.checked = true;// form.chkall.checked;
          ??????????? }
          ??????????? else
          ??????????? {
          ??????????????? e.checked = false;
          ??????????? }
          ??? }
          }

          function CheckAll(form)
          {
          ??? for (var i=0;i<form.elements.length;i++)
          ??? {
          ??????? var e = form.elements[i];
          //??????? if (e.name != 'chkall')
          ??????????? e.checked = true// form.chkall.checked;
          ??? }
          }
          建立表單對象,表單名:name=form,并建立checkbox,命名:name="checked"
          建立全選按鈕,代碼:
          <INPUT title=選擇所有的Banner,點(diǎn)擊選定按鈕 onclick=CheckAll(this.form) type=button value=全選 name=chkall style="cursor:hand">
          建立反選按鈕,代碼:
          <INPUT title=反向選擇所有的Banner,點(diǎn)擊選定按鈕 onclick=CheckOthers(this.form) type=button value=反選 name=chkOthers style="cursor:hand">

          ?

          ?

          完整代碼:

          <%@page contentType="text/html;charset=gb2312"%>
          <html>
          ?<head>
          ? <title>Dory.Doo-測試JSTL</title>
          ? <script language="javascript">
          ?? <!--
          ?? function CheckOthers(form)
          {
          ??? for (var i=0;i<form.elements.length;i++)
          ??? {
          ??????? var e = form.elements[i];
          //??????? if (e.name != 'chkall')
          ??????????? if (e.checked==false)
          ??????????? {
          ??????????????? e.checked = true;// form.chkall.checked;
          ??????????? }
          ??????????? else
          ??????????? {
          ??????????????? e.checked = false;
          ??????????? }
          ??? }
          }

          function CheckAll(form)
          {
          ??? for (var i=0;i<form.elements.length;i++)
          ??? {
          ??????? var e = form.elements[i];
          //??????? if (e.name != 'chkall')
          ??????????? e.checked = true// form.chkall.checked;
          ??? }
          }
          ?? -->
          ? </script>
          ?</head>
          ?<body>
          ? <h2>體育運(yùn)動種類</h2>
          ? <hr>
          ? <form action="test.jsp" method="post" name="form">
          ?? <input type="checkbox" name="sports" value="football"/>足球<br>
          ?? <input type="checkbox" name="sports" value="basketball"/>藍(lán)球<br>
          ?? <input type="checkbox" name="sports" value="f1"/>F1<br>
          ?? <input type="checkbox" name="sports" value="f3"/>賽車<br>
          ?? <input type="checkbox" name="sports" value="f5"/>談話<br>
          ?? <input type="checkbox" name="sports" value="qe"/>好<br>
          ?? <input type="checkbox" name="sports" value="fs"/>Helo<br>
          ?? <input type="checkbox" name="sports" value="a1"/>a1<br>
          ?? <input type="checkbox" name="sports" value="a2"/>a2<br>
          ?? <input type="checkbox" name="sports" value="a3"/>a3<br>
          ?? <input type="checkbox" name="sports" value="a4"/>a4<br>
          ?? <input type="checkbox" name="sports" value="a5"/>a5<br>
          ?? <input type="checkbox" name="sports" value="a6"/>a6<br>
          ?? <input type="checkbox" name="sports" value="a7"/>a7<br>
          ?? <br>
          ?? <p></p>
          ?? <input type="submit" name="submit" value="提交">
          ?? <input type="reset" name="reset" value="重置">
          ??
          <INPUT title="選擇所有的Banner,點(diǎn)擊選定按鈕" onclick="CheckAll(this.form)"
          ?type="button" value="全選" name="chkall" style="cursor:hand">
          ???
          <INPUT title="反向選擇所有的Banner,點(diǎn)擊選定按鈕" onclick="CheckOthers(this.form)"
          type="button" value="反選" name="chkOthers" style="cursor:hand">
          ? </form>
          ?</body>
          </html>
          ?

          posted @ 2006-06-28 09:37 多力宇揚(yáng) 閱讀(532) | 評論 (0)編輯 收藏

          ??? File類

          ?一個File類的對象,表示了磁盤上的文件或目錄。
          ?File類提供了與平臺無關(guān)的方法來對磁盤上的文件或目錄進(jìn)行操作。

          import java.io.*;
          class FileTest
          {
          ?public static void main(String[] args) throws Exception
          ?{
          ? //File f = new File("1.txt");
          ? //f.createNewFile();?? 創(chuàng)建文件
          ? //f.mkdir(); 創(chuàng)建文件夾
          ? //File f = new File("F:\\Java Develop\\1.txt");//使用絕對路徑
          ? //f.createNewFile();
          ? /*
          ? *WINDOWS平臺下有盤符,LINUX下是沒有的
          ? *考慮到JAVA語言的平臺性,所有用分隔符seperator/seperatorChar
          ? */
          ? /*
          ? File fDir = new File(File.separator);//創(chuàng)建了當(dāng)前的根目錄
          ? String strFile = "Java Develop"+File.separator+"1.txt";
          ? File f = new File(fDir,strFile);
          ? f.createNewFile();
          ? //f.delete();
          ? f.deleteOnExit();
          ? Thread.sleep(3000);
          ? */
          ? /*
          ? for(int i=0;i<5;i++)
          ? {
          ?? File.createTempFile("linshi",".tmp");
          ?? f.deleteOnExit();
          ? }
          ? Thread.sleep(3000);
          ? */
          ?
          ? File fDir = new File(File.separator);
          ? String strFile ="Java Develop"+File.separator;
          ? File f = new File(fDir,strFile);
          ? //文件過濾器
          ? String[] names = f.list(new FilenameFilter()
          ? {
          ?? public boolean accept(File dir,String name)
          ?? {
          ??? return name.indexOf(".java")!=-1;
          ?? }
          ? });
          ? for(int i=0;i<names.length;i++)
          ? {
          ?? System.out.println(names[i]);
          ? }
          ?}
          }

          ??????????? 流式I/0

          ?流(Stream)是字節(jié)的源或目的。
          ?兩種基本的流是: 輸入流(Input Stream)和輸出流(Output Stream)。從從中讀出一系列字節(jié)的
          ?對象稱為輸入流。而能向其中寫入一系列字節(jié)的對象稱為輸出流。


          ?????????? 流的分類
          ?
          ?節(jié)點(diǎn)流: 從特定的地方讀寫的流類,例如:磁盤或一塊內(nèi)存區(qū)域。
          ?過濾流: 使用節(jié)點(diǎn)作為輸入或輸出。過濾流使用的是一個已經(jīng)存在的輸入流或輸出流連接創(chuàng)建的。
          ?(如下圖)

          ?InputStream(一個抽象的基類)
          ?.三個基本的讀寫方法
          ? abstract int read(): 讀取一個字節(jié)數(shù)據(jù),并返回到數(shù)據(jù),如果返回-1,表示讀到了輸入流的
          ?????????????????????? 末尾。
          ? int read(byte[] b):? 將數(shù)據(jù)讀入一個字節(jié)數(shù)組,同時返回實(shí)際讀取的字節(jié)數(shù)。如果返回-1,
          ?????????????????????? 表示讀到了輸入流的末尾。
          ? int read(byte[] b,int off,int len): 將數(shù)據(jù)讀入一個字節(jié)數(shù)組,同時返回是實(shí)際讀取的字
          ?????????????????????? 節(jié)數(shù)。如果返回-1,表示讀到了輸入流的末尾。off指定在數(shù)組b中存放
          ?????????????????????? 數(shù)據(jù)的起始偏移位置;len指定讀取的最大字節(jié)數(shù)。
          ?其他的方法
          ? long-skip(long n): 在輸入流中跳過n個字節(jié),并返回實(shí)際跳過的字節(jié)數(shù)。
          ? int available():?? 返回在不發(fā)生阻塞的情況下,可讀取的字節(jié)數(shù)。
          ? void close():????? 關(guān)閉輸入流,釋放和這個流相關(guān)的系統(tǒng)資源。
          ? void mark(int reqdlimit): 在輸入流的當(dāng)前位置放置一個標(biāo)記,如果讀取的字節(jié)數(shù)多余
          ???????????????????? readlimit設(shè)置的值,則流忽略這個標(biāo)記。
          ? void reset():????? 返回到上一個標(biāo)記。
          ? boolean markSupported(): 測試當(dāng)前是否支持mark和reset方法。如果支持返回true,反之false。

          ???????? java.io包中的InputStream的類層次 (下圖)

          OutputStream

          ?三個基本的寫方法
          ?abstract void write(int b): 往輸出流中寫入一個字節(jié)
          ?void write(byte[] b):?????? 往輸出流中寫入數(shù)組b中的所有字節(jié)
          ?void writte(byte[] b,int off,int len): 往輸出流中寫入數(shù)組b中從偏移量off開始的len個
          ???????????????????????????? 字節(jié)的數(shù)據(jù)
          ?其它方法
          ?void flush(): 刷新輸出流,強(qiáng)制緩沖區(qū)中的輸出字節(jié)被寫出
          ?void close(): 關(guān)閉輸出流,釋放和這個流相關(guān)的系統(tǒng)資源

          ??????? java.io包中OutputStream的類層次(如下圖)

          基本的流類

          ?FileInputStream和FileOutputStream
          ?節(jié)點(diǎn)流,用于從文件中讀取或往文件中寫入字節(jié)流。如果在構(gòu)造FileOutputStream時,文件已經(jīng)
          ?存在,則覆蓋這個文件。
          ?
          ?BufferedInputStream和BufferedOutputStream
          ?過濾流,需要使用已經(jīng)存在的節(jié)點(diǎn)流來構(gòu)造,提供帶緩沖的讀寫,提高了讀寫的效率。

          ?DataInputStream和DataOutputStream
          ?過濾流,需要使用已經(jīng)存在的節(jié)點(diǎn)流來構(gòu)造,提供了讀寫Java中的基本數(shù)據(jù)類型的功能。

          ?PipedInputStream和PipedOutputStream
          ?管道流,用于線程間的通信。一個線程的PipedInputStream對象從另一個線程的PipedOutputStream
          ?對象讀取輸入。要使管道流有用,必須同時構(gòu)造管道輸入流和管道輸出流。

          code:
          import java.io.*;
          class StreamTest
          {
          ?public static void main(String[] args)throws Exception
          ?{
          ? /*
          ? int data;
          ? while((data=System.in.read())!=-1)? //從標(biāo)準(zhǔn)設(shè)備讀取數(shù)據(jù)
          ? {
          ?? System.out.write(data);//從標(biāo)準(zhǔn)設(shè)備輸出數(shù)據(jù)
          ? }
          ? */
          ? //輸出流寫數(shù)據(jù),只需要關(guān)閉尾端的流就可以了,因?yàn)閒os連接到了bos
          ? FileOutputStream fos = new FileOutputStream("1.txt");
          ? //fos.write("());
          ? //fos.close();
          ? BufferedOutputStream bos = new BufferedOutputStream(fos);
          ? //bos.write("http//www.baidu.com".getBytes());
          ? //bos.flush();
          ? //bos.close();
          ? DataOutputStream dos=new DataOutputStream(bos); //連接到了bos和fis
          ? byte b=3;
          ? int i=78;
          ? char ch='a';
          ? float f=4.5f;
          ? dos.writeByte(b);
          ? dos.writeInt(i);
          ? dos.writeChar(ch);
          ? dos.writeFloat(f);
          ? dos.close(); //必須調(diào)用flush()或者close()不然不會寫入硬盤
          ?
          ? //輸入流讀數(shù)據(jù)
          ? FileInputStream fis=new FileInputStream("1.txt");
          ? BufferedInputStream bis = new BufferedInputStream(fis);
          ? //byte[] buf=new byte[100];
          ? //int len=fis.read(buf);
          ? //int len=bis.read(buf);
          ? //System.out.println(new String(buf,0,len));
          ? //fis.close();
          ? //bis.close();
          ? //注意讀取的順序要和寫的順序一樣
          ? DataInputStream dis = new DataInputStream(bis);
          ? System.out.println(dis.readByte());
          ? System.out.println(dis.readInt());
          ? System.out.println(dis.readChar());
          ? System.out.println(dis.readFloat());
          ? dis.close();?
          ?
          ?}
          }


          管道輸入/輸出流 code:
          import java.io.*;
          class PipedStreamTest
          {
          ?public static void main(String[] args)
          ?{
          ? PipedOutputStream pos=new PipedOutputStream();
          ? PipedInputStream pis=new PipedInputStream();
          ? //連接
          ? try
          ? {
          ?? pos.connect(pis);
          ?? new Producer(pos).start();
          ?? new Consumer(pis).start();
          ? }
          ? catch(Exception e)
          ? {
          ?? e.printStackTrace();
          ? }
          ?}
          }

          class Producer extends Thread
          {
          ?private PipedOutputStream pos;
          ?public Producer(PipedOutputStream pos)
          ?{
          ? this.pos=pos;
          ?}
          ?public void run()
          ?{
          ? try
          ? {
          ?? pos.write("hello,welcome!".getBytes());
          ?? pos.close();
          ? }
          ? catch(Exception e)
          ? {
          ?? e.printStackTrace();
          ? }
          ?}
          }

          class Consumer extends Thread
          {
          ?private PipedInputStream pis;
          ?Consumer(PipedInputStream pis)
          ?{
          ? this.pis=pis;
          ?}
          ?public void run()
          ?{
          ? try
          ? {
          ?? byte[] buf=new byte[100];
          ?? int len=pis.read(buf);
          ?? System.out.println(new String(buf,0,len));
          ?? pis.close();
          ? }
          ? catch(Exception e)
          ? {
          ?? e.printStackTrace();
          ? }
          ?}
          }

          =================================================================================
          ????????????? Java I/O庫的設(shè)計(jì)原則

          ?Java的I/O庫提供了一個稱做鏈接的機(jī)制,可以將一個流與另一個流首尾相接,形成一個流管道的鏈接。
          ?這種機(jī)制實(shí)際上是一種被稱做為Decorator(裝飾)的設(shè)計(jì)模式的應(yīng)用。
          ?
          ?通過流的鏈接,可以動態(tài)的增加流的功能,而這些功能的增加是通過組合一些流的基本功能而動
          ?態(tài)獲取的。

          ?我們要獲取一個I/O對象,往往需要產(chǎn)生多個I/O對象,這也是Java I/O庫不大容易掌握的原因,
          ?但在I/O庫中的Decorator模式的運(yùn)用,給我們提供了實(shí)現(xiàn)上的靈活性。

          ?I/O流的鏈接圖(如下)

          ? Reader和Writer

          ?Java程序語言使用Unicode來表示字符串和字符。
          ?Reader和Writer這兩個抽象類主要用來讀寫字符流。

          ?java.io包中Reader的類層次(如下圖)

          ?java.io包中Writer的類層次(如下圖)


          ?code:
          import java.io.*;
          class StreamTest
          {
          ?public static void main(String[] args)throws Exception
          ?{
          ? /*
          ? FileOutputStream fos = new FileOutputStream("1.txt");
          ? OutputStreamWriter osw = new OutputStreamWriter(fos);
          ? BufferedWriter bw = new BufferedWriter(osw);
          ?
          ? bw.write("
          ? bw.close();
          ?
          ? FileInputStream fis = new FileInputStream("1.txt");
          ? InputStreamReader isr = new InputStreamReader(fis);
          ? BufferedReader br = new BufferedReader(isr);
          ? System.out.println(br.readLine());
          ? br.close();
          ? */
          ? //InputStreamReader/OutputStreamWriter是一個中間過度類,連接字符和字符串
          ? InputStreamReader isr = new InputStreamReader(System.in);
          ? BufferedReader br = new BufferedReader(isr);
          ? String strLine;
          ? while((strLine=br.readLine())!=null)
          ? {
          ?? System.out.println(strLine);
          ? }
          ? br.close();
          ?}
          }

          ??????????? 字符集的編碼

          ?ASCII(American Standard Code for Information Interchange,美國信息互換標(biāo)準(zhǔn)代碼),是基
          ?于常用的英文字符的一套電腦編碼系統(tǒng)。我們知道英文中經(jīng)常使用的字符,數(shù)字符號被計(jì)算機(jī)
          ?處理時都是以二進(jìn)制編碼的形式出現(xiàn)(bit)二進(jìn)制數(shù)對應(yīng)。其最高位是0,相應(yīng)的十進(jìn)制數(shù)是0-127
          ?如,數(shù)字1,有一些制表符和其他符號組成。ASCII是現(xiàn)金最通用的單字節(jié)編碼系統(tǒng)。

          ?GB2312: GB2312碼是中華人民共和國國家漢字信息交換用編碼,全稱《信息交換用漢字編碼字
          ?符集-基本集》。主要用于給每一個中文字符指定相應(yīng)的數(shù)字,也就是進(jìn)行編碼。一個中文字符
          ?用兩個字節(jié)的數(shù)字來表示,為了和ASCII碼有所區(qū)別,將中文字符每一個字節(jié)的最高位置都用1
          ?來表示。

          ?GBK:為了對更多的字符進(jìn)行編碼,國家又發(fā)布了新的編碼系統(tǒng)GBK(GBK的K是“擴(kuò)展”的漢語
          ?拼音的第一個字母)。在新的編碼系統(tǒng)里,除了完全兼容GB2312外,還對繁體中文,一些不常用
          ?的漢字和許多符號進(jìn)行了編碼。

          ?ISO-8859-1:是西方國家所使用的字符編碼集,是一種單字節(jié)的字符集,而英文實(shí)際上只用了其
          ?中數(shù)字小于128的部分。

          ?Unicode: 這是一種通用的字符集,對所有語言的文字進(jìn)行統(tǒng)一編碼,對每一個字符都采用2個字節(jié)
          ?來表示,對于英文字符采取前面加“0”字節(jié)的策略實(shí)現(xiàn)等長兼容。如"a"的ASCII碼為0x61,
          ?UNICODE就為0x00,0x61。

          ?UTF-8: Elight-bit UCS Transformation Format,(UCS,Universal Character Set,通用字符集,
          ?UCS是所有其他字符集標(biāo)準(zhǔn)的一個超集)。一個7位的ASCII碼值,對應(yīng)的UTF碼是一個字節(jié),如果
          ?字符是0x0000,或在0x0080與0x007f之間,對應(yīng)的UTF碼是兩個字節(jié),如果字符在0x0800與0xffff
          ?之間,對應(yīng)的UTF碼是三個字節(jié)。
          ?編碼:將一個Unicode碼轉(zhuǎn)換為本地字符表示的過程為編碼。
          ? 解碼:將一個字節(jié)轉(zhuǎn)換為一個字符(用Unicode表示),這個過程叫解碼。
          ??????? [簡單的說去獲取一個Unicode碼就是解碼]
          ?code:

          import java.util.*;
          import java.nio.charset.*;
          class CharsetTest
          {
          ?public static void main(String[] args)throws Exception
          ?{
          ? /*
          ? Map m=Charset.availableCharsets();
          ? Set names=m.keySet();
          ? Iterator it =names.iterator();
          ? while(it.hasNext())
          ? {
          ?? System.out.println(it.next());
          ? }
          ? */
          ? Properties pps=System.getProperties();
          ? //pps.list(System.out);
          ? pps.put("file.encoding","ISO-8859-1");
          ? int data;
          ? byte[] buf=new byte[100];
          ? int i=0;
          ? while((data=System.in.read())!='q')
          ? {
          ?? buf[i]=(byte)data;
          ?? i++;
          ? }
          ? String str=new String(buf,0,i);
          ? //String strGBK=new String(str.getBytes("ISO-8859-1"),"GBK");
          ? //System.out.println(strGBK);
          ? System.out.println(str);
          ?}
          }

          ?

          ???? RandomAccessFile

          ? RandomAccessFile類同時實(shí)現(xiàn)了DataInput和DataOutput接口,提供了對文件隨機(jī)存取的功能,
          ? 利用這個類可以在文件的任何位置讀取或?qū)懭霐?shù)據(jù)。
          ? RandomAccessFile類提供了一個文件指針,用來標(biāo)志要進(jìn)行讀寫操作的下一位數(shù)據(jù)的位置。

          ?
          ?code:
          import java.io.*;
          class RandomFileTest
          {
          ?public static void main(String[] args)throws Exception
          ?{
          ? Student s1 = new Student(1,"zhangsan",98.5);
          ? Student s2 = new Student(2,"lisi",90.5);
          ? Student s3 = new Student(3,"wangwu",78.5);
          ?
          ? RandomAccessFile rsf=new RandomAccessFile("student.txt","rw");? //存取模式rw
          ? s1.WriteStudent(rsf);
          ? s2.WriteStudent(rsf);
          ? s3.WriteStudent(rsf);
          ?
          ? Student s =new Student();
          ? rsf.seek(0); //把文件指針移到文件首
          ? for(long i=0;i<rsf.length();i=rsf.getFilePointer())
          ? {
          ?? s.ReadStudent(rsf);
          ?? System.out.println(s.num+":"+s.name+":"+s.score);
          ? }
          ? rsf.close();
          ?}
          }

          class Student
          {
          ?int num;
          ?String name;
          ?double score;
          ?Student()
          ?{
          ?
          ?}
          ?Student(int num,String name,double score)
          ?{
          ? this.num=num;
          ? this.name=name;
          ? this.score=score;
          ?}
          ?public void WriteStudent(RandomAccessFile raf)throws Exception
          ?{
          ? raf.writeInt(num);
          ? raf.writeUTF(name);
          ? raf.writeDouble(score);
          ?}
          ?public void ReadStudent(RandomAccessFile raf)throws Exception
          ?{
          ? raf.readInt();
          ? raf.readUTF();
          ? raf.readDouble();?
          ?}
          }


          ?????????? 對象序列化

          ?.將對象轉(zhuǎn)換為字節(jié)流保存起來,并在日后還原這個對象,這種機(jī)制叫做對象序列化。
          ?.將一個對象保存到永久存儲設(shè)備上稱為持續(xù)性。
          ?.一個對象要想能夠?qū)崿F(xiàn)序列化,必須實(shí)現(xiàn)Serializable接口或Externalizable接口。
          ?.當(dāng)一個對象被序列化時,只保存對象的非靜態(tài)成員變量,不能保存任何的成員變量和靜態(tài)的
          ? 成員變量。
          ?.如果一個對象的成員變量是一個對象,那么這個對象的數(shù)據(jù)成員也會被保存。
          ?.如果一個可序列化的對象包含對某個不可序列化的對象的引用,那么整個序列化操作將會失敗,
          ? 并且會拋出一個NotSerializableException。我們可以將這個引用標(biāo)記為transient,那么對象
          ? 仍然可以序列化。

          ?code:
          import java.io.*;
          class ObjectSerialTest
          {
          ?public static void main(String[] args)throws Exception
          ?{
          ? Employee e1 = new Employee("zhangsan",20,2800.50);
          ? Employee e2 = new Employee("lisi",22,25000.50);
          ? Employee e3 = new Employee("wangwu",23,12800.50);
          ? Employee e4 = new Employee("blovesaga",22,3800.50);
          ?
          ? FileOutputStream fos=new FileOutputStream("employee.txt");
          ? ObjectOutputStream oos=new ObjectOutputStream(fos);
          ? oos.writeObject(e1);
          ? oos.writeObject(e2);
          ? oos.writeObject(e3);
          ? oos.writeObject(e4);
          ? oos.close();
          ?
          ? FileInputStream fis = new FileInputStream("employee.txt");
          ? ObjectInputStream ois =new ObjectInputStream(fis);
          ? Employee e;
          ? for(int i=0;i<4;i++)
          ? {
          ?? e=(Employee)ois.readObject();
          ?? System.out.println(e.name+":"+e.age+":"+e.salary);
          ? }
          ? ois.close();
          ?}
          }

          class Employee implements Serializable
          {
          ?String name;
          ?int age;
          ?double salary;
          ?transient Thread t1 =new Thread();
          ?Employee(String name,int age,double salary)
          ?{
          ? this.name=name;
          ? this.age=age;
          ? this.salary=salary;
          ?}
          ?//可以寫private void readObject()方法來控制我們自己想要實(shí)現(xiàn)的
          ?private void writeObject(java.io.ObjectOutputStream oos)throws Exception
          ?{
          ? //例如我們自己寫想要顯示的順序和那些需要顯示
          ? oos.writeInt(age);
          ? oos.writeUTF(name);
          ? System.out.println("Write Object");
          ?}
          ?private void readObject(java.io.ObjectInputStream ois)throws Exception
          ?{
          ? //按照寫入的順序來讀取
          ? age=ois.readInt();
          ? name=ois.readUTF();
          ? System.out.println("Read Object");
          ?}
          }

          posted @ 2006-06-27 17:40 多力宇揚(yáng) 閱讀(835) | 評論 (0)編輯 收藏

          ?Collection?????????????Map(和Collection接口沒任何關(guān)系)
          ?????? / \???????????????????????? |
          ????? /?? \??????????????????????? |??????
          ?Set?? List??????????????SortedMap
          ??? /
          ?? /
          SortedSet
          (接口圖)

          所謂框架就是一個類庫的集合。集合框架就是一個用來表示和操作集合的統(tǒng)一框架,包含了實(shí)現(xiàn)
          集合的接口和類。
          ?
          ?集合框架中的接口

          ?.Collection: 集合層次中的根接口,JDK沒有提供這個接口直接的實(shí)現(xiàn)類。
          ?.Set: 不能包含重復(fù)的元素。SortedSet是一個按照升序排列元素的Set。
          ?.List: 是一個有序的集合,可以包含重復(fù)的元素。提供了按照索引訪問的方式。
          ?.Map: 包含了key-value對。Map不能包含重復(fù)的key。SortedMap是一個按照升序排列key的Map。
          ?
          ?集合框架中的實(shí)現(xiàn)類
          ?
          ?實(shí)線表示繼承類,虛線表示實(shí)現(xiàn)類。
          ?(圖如下)

          .ArrayList: 我們可以將其看做是能夠自動增長容量的數(shù)組。
          ?.利用ArrayList的toArray()返回一個數(shù)組。
          ?.Arrays.asList()返回一個列表。
          ?.迭代器(Iterator)給我們提供了一種通用的方式來訪問集合中的元素。

          ?注意: 從集合類中獲取一個數(shù)組 toArray(),從數(shù)組獲取列表利用Arrays.asList()
          ?例子:
          import java.util.*;
          class ArrayListTest
          {
          ?public static void printElement(Collection c)
          ?{
          ? Iterator it = c.iterator();
          ? while(it.hasNext())
          ? {
          ?? System.out.println(it.next());
          ? }
          ?}
          ?public static void main(String[] args)
          ?{
          ? ArrayList a = new ArrayList();
          ? /*
          ? a.add("abc");
          ? a.add("def");
          ? a.add("hjk");
          ? */
          ?
          ? a.add(new Point(1,1));
          ? a.add(new Point(2,2));
          ? a.add(new Point(3,3));
          ? /*
          ? Object[] o;
          ? o=a.toArray();? //將集合類轉(zhuǎn)換為數(shù)組
          ? for(int i=0;i<o.length;i++)
          ? {
          ?? System.out.println(o[i]);
          ? }
          ?
          ? List b = new ArrayList();
          ? b=Arrays.asList(o);
          ? System.out.println(b);
          ?
          ? for(int i=0;i<a.size();i++)
          ? {
          ?? System.out.println(a.get(i));
          ? }
          ?
          ? System.out.println(a);
          ? System.out.println(a);
          ? */
          ?
          ? /*
          ? Iterator it = a.iterator();
          ?? 如果要刪除元素,必須先調(diào)用next方法
          ? it.next();
          ? it.remove();
          ? while(it.hasNext())
          ? {
          ?? System.out.println(it.next());
          ? }
          ? */
          ? //迭代器的作用: 提供一組通用的訪問方式
          ? printElement(a);
          ?}
          }

          class Point
          {
          ?int x, y;
          ?Point(int x, int y)
          ?{
          ? this.x=x;
          ? this.y=y;
          ?}
          ?public String toString()
          ?{
          ? return "x="+x+","+"y="+y;
          ?}
          }

          ?Collections類

          ?.排序: Collections.sort(); [區(qū)別與Arrays.sort()]
          ? (1) 自然排序(natural ordering);
          ? (2) 實(shí)現(xiàn)比較器(Comparator)接口。
          ?.取最大和最小的元素: Collections.max(),Collections.min();
          ?.在已排序的List中搜索指定的元素: Collections.binarySearch()。

          ?代碼示例:
          import java.util.*;
          class ArrayListTest
          {
          ?public static void printElement(Collection c)
          ?{
          ? Iterator it = c.iterator();
          ? while(it.hasNext())
          ? {
          ?? System.out.println(it.next());
          ? }
          ?}
          ?public static void main(String[] args)
          ?{
          ? /*
          ? ArrayList a = new ArrayList();
          ?
          ? a.add("abc");
          ? a.add("def");
          ? a.add("hjk");
          ?
          ?
          ? a.add(new Point(1,1));
          ? a.add(new Point(2,2));
          ? a.add(new Point(3,3));
          ?
          ? Object[] o;
          ? o=a.toArray();? //將集合類轉(zhuǎn)換為數(shù)組
          ? for(int i=0;i<o.length;i++)
          ? {
          ?? System.out.println(o[i]);
          ? }
          ?
          ? List b = new ArrayList();
          ? b=Arrays.asList(o);
          ? System.out.println(b);
          ?
          ? for(int i=0;i<a.size();i++)
          ? {
          ?? System.out.println(a.get(i));
          ? }
          ?
          ? System.out.println(a);
          ? System.out.println(a);
          ? */
          ?
          ? /*
          ? Iterator it = a.iterator();
          ?? 如果要刪除元素,必須先調(diào)用next方法
          ? it.next();
          ? it.remove();
          ? while(it.hasNext())
          ? {
          ?? System.out.println(it.next());
          ? }
          ? */
          ? //迭代器的作用: 提供一組通用的訪問方式
          ? //printElement(a);
          ?
          ? Student s1 = new Student(1,"zhangsan");
          ? Student s2 = new Student(2,"lisi");
          ? Student s3 = new Student(3,"wangwu");
          ? Student s4 = new Student(3,"blovesaga");
          ?
          ? ArrayList a = new ArrayList();
          ? a.add(s1);
          ? a.add(s2);
          ? a.add(s3);
          ? a.add(s4);
          ?
          ? //Collections.sort(a);
          ? Collections.sort(a,new Student.StudentComparator());
          ? printElement(a);
          ?}
          }

          class Point
          {
          ?int x, y;
          ?Point(int x, int y)
          ?{
          ? this.x=x;
          ? this.y=y;
          ?}
          ?public String toString()
          ?{
          ? return "x="+x+","+"y="+y;
          ?}
          }

          class Student implements Comparable
          {
          ?int num;
          ?String name;
          ?//實(shí)現(xiàn)比較器,它總是和我們的一個類相關(guān),用內(nèi)部類
          ?static class StudentComparator implements Comparator? //為了調(diào)用方便聲明為靜態(tài)的
          ?{
          ? public int compare(Object o1,Object o2)
          ? {
          ?? Student s1 = (Student)o1;
          ?? Student s2 = (Student)o2;
          ?? int result=s1.num > s2.num ? 1: (s1.num==s2.num ? 0 : -1);
          ?? if(result==0)
          ?? {
          ??? return s1.name.compareTo(s2.name);
          ?? }
          ?? return result;
          ? }
          ?}
          ?Student(int num,String name)
          ?{
          ? this.num=num;
          ? this.name=name;
          ?}
          ?public int compareTo(Object o)
          ?{
          ? Student s=(Student)o;
          ? return num > s.num ? 1 :( (num==s.num) ? 0 : -1);
          ?}
          ?
          ?public String toString()
          ?{
          ? return +num+":"+name;
          ?}
          }

          posted @ 2006-06-27 17:36 多力宇揚(yáng) 閱讀(243) | 評論 (0)編輯 收藏

          >>>>>>>>>>>>>>>>Runtime和Process類<<<<<<<<<<<<<<<<<<<
          1> 每一個Java程序都有一個Runtime類的單一實(shí)例。
          2> 通過Runtime.getRuntime()獲取Runtime類的實(shí)例。
          3> Runtime類是使用單例模式的一個例子。
          ?? Runtime沒有public的構(gòu)造方法。我們必須用Runtime的靜態(tài)方法getRuntime();我們可以用
          ?? Runtime的exec來執(zhí)行一個外部程序,也可以用來編譯一個源文件(用來做圖形界面的編譯器)。
          import java.io.*;
          class RuntimeTest
          {
          ?public static void main(String[] args)
          ?{
          ? Runtime rt=Runtime.getRuntime();
          ? //System.out.println(rt.freeMemory());
          ? try
          ? {
          ?? //rt.exec("notepad");
          ?? Process p=rt.exec("java ArrayTest");
          ?? InputStream is=p.getInputStream(); //從執(zhí)行ArrayTest類所得來的
          ?? int data;
          ?? while((data=is.read())!=-1)
          ?? {
          ??? System.out.print((char)data);
          ?? }
          ? }
          ? catch(Exception e)
          ? {
          ?? e.printStackTrace();
          ? }
          ?}
          }

          ------------->>設(shè)計(jì)模式<<-------------
          1> 在我們進(jìn)行程序設(shè)計(jì)時,逐漸形成了一些典型問題和問題解決方案,這就是軟件模式。
          2> 每一個模式描述了一個在我們程序設(shè)計(jì)中經(jīng)常發(fā)生的問題,以及該問題的解決方案。
          3> 當(dāng)我們碰到模式所描述的問題,就可以直接用相應(yīng)的解決方法去解決這個問題,這就是設(shè)計(jì)模式。
          <$>單例(Singleton)模式
          1> 一個類只有一個實(shí)例,而且自行實(shí)例化并像整個系統(tǒng)提供這個實(shí)例,這個類稱為單例類。
          2> 單例類的一個重要特點(diǎn)就是類的構(gòu)造方法是私有的,從而避免了外部用利用構(gòu)造方法直接創(chuàng)建多個實(shí)例。
          ?? 如:Runtime類。

          單例類的實(shí)現(xiàn):(code)
          class Singleton
          {
          ?private static final Singleton st=new Singleton();
          ?private Singleton()
          ?{
          ?
          ?}
          ?public static Singleton getInstance()
          ?{
          ? return st;
          ?}
          }

          posted @ 2006-06-27 17:30 多力宇揚(yáng) 閱讀(672) | 評論 (0)編輯 收藏

          僅列出標(biāo)題
          共5頁: 上一頁 1 2 3 4 5 下一頁 
          主站蜘蛛池模板: 友谊县| 永州市| 稻城县| 嘉禾县| 江山市| 肇东市| 镇坪县| 闵行区| 九寨沟县| 阳曲县| 高密市| 邵武市| 广水市| 太白县| 阳江市| 雅安市| 廉江市| 百色市| 沾化县| 黎川县| 新巴尔虎左旗| 自治县| 潢川县| 天台县| 合作市| 陆川县| 二手房| 金沙县| 巴林右旗| 竹北市| 新乡县| 丹凤县| 霍邱县| 合阳县| 乾安县| 云梦县| 松桃| 太谷县| 滨州市| 呈贡县| 自治县|