0734w-月下竹音

          0734是來自家鄉(xiāng)的聲音

          常用鏈接

          統(tǒng)計

          最新評論

          2006年5月28日 #

          ORACLE沒有監(jiān)聽器錯誤

          一、運行監(jiān)聽器
          在CMD中輸入以下內(nèi)容.
          C:\>lsnrctl
          LSNRCTL for 32-bit Windows: Version 8.1.6.0.0 - Production on 14-3月 -2003 14:17
          :51(c) Copyright 1998, 1999, Oracle Corporation. All rights reserved.

          歡迎來到LSNRCTL,請鍵入"help"以獲得信息。

          LSNRCTL> status
          連接至(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=robust)(PORT=1521)))
          TNS-01103: 地址的協(xié)議專用組件指定不正確
          TNS-12541: TNS:無監(jiān)聽器
          TNS-12560: TNS:協(xié)議適配器出現(xiàn)錯誤
          TNS-00511: 無監(jiān)聽器
          32-bit Windows Error: 61: Unknown error

          LSNRCTL> start
          啟動tnslsnr:請稍候...

          Failed to start service, error 3.
          TNS-12536: TNS:可能會阻礙*作
          TNS-12560: TNS:協(xié)議適配器出現(xiàn)錯誤
          TNS-00506: *作可能阻塞
          32-bit Windows Error: 997: Unknown error

          二,解決方案


          修改?listerner.ora(..\ora92\network\admin),文件,確保如下:
          LISTENER =
          ? (DESCRIPTION =
          ??? (ADDRESS = (PROTOCOL = TCP)(HOST = tiger)(PORT = 1521))
          ? )

          SID_LIST_LISTENER =
          ? (SID_LIST =
          ??? (SID_DESC =
          ????? (GLOBAL_DBNAME = ORCL)
          ????? (ORACLE_HOME = E:\oracle\ora92)
          ????? (SID_NAME = ORCL)
          ??? )
          ? )

          最后回到CMD中啟動
          LSNRCTL> start

          posted @ 2006-05-28 15:26 sparkwu 閱讀(3053) | 評論 (3)編輯 收藏

          2006年5月12日 #

          HP-unix最基本操作

          1. telnet 10.202.10.1?? 連接主機
          2. pwd????????????????? 查看當前目錄
          3. ls?????????????????? 查看當前文件
          4. get filename.zip???? 從FTP中拷貝filename.zip到本地
          5. mkdir? test2???????? 建立test2目錄
          6. quit:?????????????? 同bye,退出ftp會話。
          7. mkdir??????????????? 建立文件夾
          8. rmdir dir-name:???? 刪除目錄。
          9. put local-file[remote-file]:????????????? 將本地文件local-file傳送至遠程主機
          10. cp /etc/passwd.txt?? /etc/passwd.bak.txt?? 復制 (copy) 之指令
          11. cdup?????????????????????????????????????? 進入遠程主機目錄的父目錄

          posted @ 2006-05-12 10:45 sparkwu 閱讀(345) | 評論 (0)編輯 收藏

          2006年5月11日 #

          hp-unix 操作命令!

          操作命令
          1-1.處理目錄
          pwd:?顯示當前工作目錄&&
          cd?directory_path:?更改目錄&&
          cd:?更改為主目錄&&
          mkdir?directory_name:?創(chuàng)建目錄&&
          rmdir?directory_name:?刪除空目錄&& 

          1-2.處理文件
          elm:?閱讀郵件&&
          ls:?列舉當前目錄下的文件和目錄&&
          ls?-a:?列舉所有文件或目錄包括隱藏點文件&
          lsf:?列舉文件并用/?標記目錄名&
          compress?filename:?壓縮文件
          uncompress?filename:?解壓縮文件
          vi?file_name:?創(chuàng)建或編輯文件
          more?file_name:?顯示文件內(nèi)容?(按q?退出)
          head?file_name:?顯示文件的前10?行
          tail?file_name:?顯示文件的后10?行
          cp?file_name?file_copy:?復制文件
          mv?old_file?new_file:?將文件重命名為新文件名
          cat?file1?>>?file2:?將file1?附加到file2?的結(jié)尾處
          rm?file:?刪除file&
          rm?-rf?dir_name:?刪除目錄dir_name?及其所有文件
          spell?file_name:?在文件中檢查拼寫

          1-3.打印
          lp?file_name:?打印文件
          lpstat?-t:?確定打印機的狀態(tài)
          cancel?request_id:?取消打印請求

          1-4.查找和組織
          find?.-name?'x*':?在當前目錄和子目錄中查找以x?開頭的文件
          grep?word?*:?在當前目錄下的所有文件中查找word?一詞的所有匹配
          sort?listfile:?按字母順序?qū)istfile?進行排序
          date:?顯示日期和時間
          alias:?列舉所有命令的別名
          man?command_name:?查找HP-UX?命令信息
          echo?$PATH:?確定PATH?設置
          echo?$SHELL:?確定所用的shell 

          1-5.安全操作
          passwd:?創(chuàng)建或更改口令
          ll?file_name:?顯示文件的權(quán)限
          ll?-d?directory_name:?顯示目錄的權(quán)限
          chmod?class=permissions?name:?更改文件或目錄權(quán)限
          chown?user?name:?更改文件或目錄的所有權(quán)

          1-6.系統(tǒng)操作
          clear:?清除屏幕
          set?-o?editor_name:?設置命令行編輯器
          TERM=term_type:?設置終端類型(從/usr/lib/terminfo?中選擇term_type)&
          ps?-ef:?列舉當前進程狀態(tài)和PID&
          kill?PID:?終止進程
          passwd:?創(chuàng)建或更改口令
          command?<?infile:?將輸入從文件重定向到命令
          command1?|?command2:?使用管道連接兩個進程

          posted @ 2006-05-11 17:16 sparkwu 閱讀(687) | 評論 (0)編輯 收藏

          2006年4月6日 #

          (轉(zhuǎn))Java + XML = JDOM

          Java?+?XML?=?JDOM?!?
          這就是JDOM設計者的目標。如果你曾經(jīng)使用過煩人的SAX或是DOM來處理XML,你就會知道為什么 要有JDOM或者是JAXB。在今年(2002)的JavaOne會議上JDOM的主要創(chuàng)始人Jason?Hunter有一篇精彩的演講介紹了JDOM技 術(shù),題目就是JDOM?Makes?XML?Easy。?
          獲得并安裝JDOM?
          在http://jdom.org可以下載JDOM的最新 版本。以JDOM?beta8的2進制版本為例。下載后解壓縮,JDOM的jar文件就是build目錄下的文件jdom.jar,將之加入類路徑。另外 JDOM還需要lib目錄下那些jar文件如xerces.jar,jaxp.jar的支持。如果在使用中出現(xiàn)以下錯誤:?
          java.lang.NoSuchMethodError?
          或?
          java.lang.NoClassDefFoundError:?org/xml/sax/SAXNotRecognizedException?
          你需要保證xerces.jar文件在CLASSPATH中位于其他XML類,如JAXP或Crimson之前,這些類文件,包括以前老版本的xerces,可能不支持SAX2.0或DOM?Level?2。于是導致了上面的錯誤。?

          一個簡單的例子?
          JDOM的處理方式有些類似于DOM,但它主要是用SAX實現(xiàn)的,你不必擔心處理速度和內(nèi)存的問題。另外,JDOM中幾乎沒有接口,的類全部是實實在在的類,沒有類工廠類的。

          下面是實例用的XML文件:

          <?xml?version="1.0"?encoding="GBK"?>
          <書庫>
          <書>
          <書名>Java編程入門</書名>
          <作者>張三</作者>
          <出版社>電子出版社</出版社>
          <價格>35.0</價格>
          <出版日期>2002-10-07</出版日期>
          </書>
          <書>
          <書名>XML在Java中的應用</書名>
          <作者>李四</作者>
          <出版社>希望出版社</出版社>
          <價格>92.0</價格>
          <出版日期>2002-10-07</出版日期>
          </書>
          </書庫>

          下面是操作XML文件的Bean:
          package?xml;
          /**
          *?XML的讀寫操作Bean
          */
          import?java.io.*;
          import?java.util.*;
          import?org.jdom.*;
          import?org.jdom.output.*;
          import?org.jdom.input.*;
          import?javax.servlet.*;
          import?javax.servlet.http.*;
          public?class?XmlBean{
          private?String?bookname,author,pub,price,pubdate;
          public?String?getbookname()?{?return?bookname;}
          public?String?getauthor()?{?return?author;}
          public?String?getpub()?{?return?pub;}
          public?String?getprice()?{?return?price;}
          public?String?getpubdate()?{?return?pubdate;}
          public?void?setbookname(String?bookname)?{?this.bookname?=bookname?;?}
          public?void?setauthor(String?author)?{?this.author?=author;?}
          public?void?setpub(String?pub)?{?this.pub?=pub?;?}
          public?void?setprice(String?price)?{?this.price?=price?;?}
          public?void?setpubdate(String?pubdate)?{?this.pubdate?=pubdate?;?}
          public?XmlBean(){}
          /**
          *?讀取XML文件所有信息
          */
          public?Vector?LoadXML(String?path)throws?Exception{
          Vector?xmlVector?=?null;
          FileInputStream?fi?=?null;
          try{
          fi?=?new?FileInputStream(path);
          xmlVector?=?new?Vector();
          SAXBuilder?sb?=?new?SAXBuilder();
          Document?doc?=?sb.build(fi);
          Element?root?=?doc.getRootElement();?//得到根元素
          List?books?=?root.getChildren();?//得到根元素所有子元素的集合
          Element?book?=null;
          XmlBean?xml?=null;
          for(int?i=0;i<books.size();i++){
          xml?=?new?XmlBean();
          book?=?(Element)books.get(i?);?//得到第一本書元素
          xml.setbookname(book.getChild("書名").getText());
          xml.setauthor(book.getChild("作者").getText());
          xml.setpub(book.getChild("出版社").getText());
          xml.setprice(book.getChild("價格").getText());
          xml.setpubdate(book.getChild("出版日期").getText());
          xmlVector.add(xml);
          }
          }
          catch(Exception?e){
          System.err.println(e+"error");
          }
          finally{
          try{
          fi.close();
          }
          catch(Exception?e){
          e.printStackTrace();
          }
          }
          return?xmlVector;
          }
          /**
          *?刪除XML文件指定信息
          */
          public?static?void?DelXML(HttpServletRequest?request)throws?Exception{
          FileInputStream?fi?=?null;
          FileOutputStream?fo?=?null;
          try{
          String?path=request.getParameter("path");
          int?xmlid=Integer.parseInt(request.getParameter("id"));
          fi?=?new?FileInputStream(path);
          SAXBuilder?sb?=?new?SAXBuilder();
          Document?doc?=?sb.build(fi);
          Element?root?=?doc.getRootElement();?//得到根元素
          List?books?=?root.getChildren();?//得到根元素所有子元素的集合
          books.remove(xmlid);//刪除指定位置的子元素
          String?indent?=?"?";
          boolean?newLines?=?true;
          XMLOutputter?outp?=?new?XMLOutputter(indent,newLines,"GBK");
          fo=new?FileOutputStream(path);
          outp.output(doc,fo);
          }
          catch(Exception?e){
          System.err.println(e+"error");
          }
          finally{
          try{
          fi.close();
          fo.close();
          }
          catch(Exception?e){
          e.printStackTrace();
          }
          }
          }
          /**
          *?添加XML文件指定信息
          */
          public?static?void?AddXML(HttpServletRequest?request)throws?Exception{
          FileInputStream?fi?=?null;
          FileOutputStream?fo?=?null;
          try{
          String?path=request.getParameter("path");
          fi?=?new?FileInputStream(path);
          SAXBuilder?sb?=?new?SAXBuilder();
          Document?doc?=?sb.build(fi);
          Element?root?=?doc.getRootElement();?//得到根元素
          List?books?=?root.getChildren();?//得到根元素所有子元素的集合
          String?bookname=request.getParameter("bookname");
          String?author=request.getParameter("author");
          String?price=request.getParameter("price");
          String?pub=request.getParameter("pub");
          String?pubdate=request.getParameter("pubdate");
          Text?newtext;
          Element?newbook=?new?Element("書");
          Element?newname=?new?Element("書名");
          newname.setText(bookname);
          newbook.addContent(newname);
          Element?newauthor=?new?Element("作者");
          newauthor.setText(author);
          newbook.addContent(newauthor);
          Element?newpub=?new?Element("出版社");
          newpub.setText(pub);
          newbook.addContent(newpub);
          Element?newprice=?new?Element("價格");
          newprice.setText(price);
          newbook.addContent(newprice);
          Element?newdate=?new?Element("出版日期");
          newdate.setText(pubdate);
          newbook.addContent(newdate);
          books.add(newbook);//增加子元素
          String?indent?=?"?";
          boolean?newLines?=?true;
          XMLOutputter?outp?=?new?XMLOutputter(indent,newLines,"GBK");
          fo=new?FileOutputStream(path);
          outp.output(doc,fo);
          }
          catch(Exception?e){
          System.err.println(e+"error");
          }
          finally{
          try{
          fi.close();
          fo.close();
          }
          catch(Exception?e){
          e.printStackTrace();
          }
          }
          }
          /**
          *?修改XML文件指定信息
          */
          public?static?void?EditXML(HttpServletRequest?request)throws?Exception{
          FileInputStream?fi?=?null;
          FileOutputStream?fo?=?null;
          try{
          String?path=request.getParameter("path");
          int?xmlid=Integer.parseInt(request.getParameter("id"));
          fi?=?new?FileInputStream(path);
          SAXBuilder?sb?=?new?SAXBuilder();
          Document?doc?=?sb.build(fi);
          Element?root?=?doc.getRootElement();?//得到根元素
          List?books?=?root.getChildren();?//得到根元素所有子元素的集合
          Element?book=(Element)books.get(xmlid);
          String?bookname=request.getParameter("bookname");
          String?author=request.getParameter("author");
          String?price=request.getParameter("price");
          String?pub=request.getParameter("pub");
          String?pubdate=request.getParameter("pubdate");
          Text?newtext;
          Element?newname=?book.getChild("書名");
          newname.setText(bookname);//修改書名為新的書名
          Element?newauthor=?book.getChild("作者");
          newauthor.setText(author);
          Element?newpub=?book.getChild("出版社");
          newpub.setText(pub);
          Element?newprice=?book.getChild("價格");
          newprice.setText(price);
          Element?newdate=?book.getChild("出版日期");
          newdate.setText(pubdate);
          //books.set(xmlid,book);//修改子元素
          String?indent?=?"?";
          boolean?newLines?=?true;
          XMLOutputter?outp?=?new?XMLOutputter(indent,newLines,"GBK");
          fo=new?FileOutputStream(path);
          outp.output(doc,fo);
          }
          catch(Exception?e){
          System.err.println(e+"error");
          }
          finally{
          try{
          fi.close();
          fo.close();
          }
          catch(Exception?e){
          e.printStackTrace();
          }
          }
          }
          }

          下面是操作的jsp文件:
          <%@?page?contentType="text/html;charset=GBK"?%>
          <%@?page?language="java"?import="java.util.*,xml.*"%>
          <html>
          <head>
          <title>讀取XML文件資料</title>
          </head>
          <body>
          <h3?align="center">JDOM操作XML文件</h3>
          <p?align="center">讀取XML文件中的所有資料</p>
          <center>
          <table?border="1"?cellpadding="0"?cellspacing="1"?style="border-collapse:?collapse"?width="80%"?id="AutoNumber1">
          <tr>
          <td?align="center"?width="92">書名</td>
          <td?align="center"?width="92">作者</td>
          <td?align="center"?width="92">出版社</td>
          <td?align="center"?width="92">價格</td>
          <td?align="center"?width="92">出版日期</td>
          <td?align="center"?width="94">操作</td>
          </tr>
          </table>
          <%
          String?path?=?application.getRealPath("/test/xml/")+"testC.xml";
          XmlBean?xml=new?XmlBean();
          Vector?xmlall=xml.LoadXML(path);
          for(int?i=0;i<xmlall.size();i++){
          xml=(XmlBean)xmlall.elementAt(i?);
          /**out.println("書名:"+xml.getbookname()+"<br>");
          out.println("作者:"+xml.getauthor()+"<br>");
          out.println("出版社:"+xml.getpub()+"<br>");
          out.println("價格:"+xml.getprice()+"<br>");
          out.println("出版日期:"+xml.getpubdate()+"<br><br>");
          */
          %>
          <table?border="1"?cellpadding="0"?cellspacing="1"?style="border-collapse:?collapse"?width="80%"?id="AutoNumber2">
          <tr>
          <td?align="center"?width="92"><%=xml.getbookname()%></td>
          <td?align="center"?width="92"><%=xml.getauthor()%></td>
          <td?align="center"?width="92"><%=xml.getpub()%></td>
          <td?align="center"?width="92"><%=xml.getprice()%></td>
          <td?align="center"?width="92"><%=xml.getpubdate()%></td>
          < td?align="center"?width="94"><a?href="xmlok.jsp?act=del&id=< %=i%>&path=<%=path%>">刪除</a></td>
          </tr>
          </table>
          <%}%>
          </center>
          <form?method="POST"?action="xmlok.jsp">
          <p?align="center">
          <input?type="radio"?value="add"?checked?name="act">添加資料?<input?type="radio"?value="edit"?name="act">編輯資料
          序?號:<select?size="1"?name="id">
          <%for(int?i=0;i<xmlall.size();i++){%>
          <option?value="<%=i%>">第<%=i+1%>條</option>
          <%}%>
          </select><br>
          書?名:<input?type="text"?name="bookname"?size="20"><br>
          作?者:<input?type="text"?name="author"?size="20"><br>
          出版社:<input?type="text"?name="pub"?size="20"><br>
          價?格:<input?type="text"?name="price"?size="20"><br>
          日?期:<input?type="text"?name="pubdate"?size="20"></p>
          <input?type="hidden"?name="path"?value="<%=path%>">
          < p?align="center"><input?type="submit"?value="提交"?name="B1">< input?type="reset"?value="重置"?name="B2"></p>
          </form>
          </body>
          </html>

          下面是處理上一文件提交的jsp文件:
          <%@?page?contentType="text/html;charset=GBK"?%>
          <%@?page?language="java"?import="xml.*"%>
          <%if(request.getParameter("act")!=null?&&?request.getParameter("act").equals("add")){
          XmlBean.AddXML(request);
          out.println("<p?align='center'><br><br>添加成功<br><br><a?href=''>返回</a>");
          }
          else?if(request.getParameter("act")!=null?&&?request.getParameter("act").equals("del")){
          XmlBean.DelXML(request);
          out.println("<p?align='center'><br><br>刪除成功<br><br><a?href=''>返回</a>");
          }
          else?if(request.getParameter("act")!=null?&&?request.getParameter("act").equals("edit")){
          XmlBean.EditXML(request);
          out.println("<p?align='center'><br><br>修改成功<br><br><a?href=''>返回</a>");
          }
          else{out.print("<p?align='center'><br><br>非法操作<br><br><a?href=''>返回</a>");}

          posted @ 2006-04-06 18:19 sparkwu 閱讀(524) | 評論 (0)編輯 收藏

          (收藏)用JDOM處理XML文檔

          用JDOM處理XML文檔


          ?用JDOM處理XML文檔(轉(zhuǎn)載)
          關(guān)鍵詞:Java、JDOM、XML、JAXB?

          (一)JDOM的介紹以及與JAXB的比較?

          Java?+?XML?=?JDOM?!?
          這 就是JDOM設計者的目標。如果你曾經(jīng)使用過煩人的SAX或是DOM來處理XML,你就會知道為什么要有JDOM或者是JAXB。在今年(2002)的 JavaOne會議上JDOM的主要創(chuàng)始人Jason?Hunter有一篇精彩的演講介紹了JDOM技術(shù),題目就是 JDOM?Makes?XML?Easy。?
          在那篇文檔里,JDOM被拿來與DOM比較,而我更愿意拿它同JAXB比較。因為JAXB和JDOM 都是為了在Java中提供比DOM和SAX更為方便的XML處理接口而開發(fā)的,并且通過完全不同的途徑來解決這個問題。JDOM的處理方式是與DOM類似 的樹操作。而JAXB通過DTD和綁定模式來生成訪問XML文檔的Java代碼,將XML映射成了Java對象來操作。你可以根據(jù)項目的需要和個人喜好來 決定采用哪一個。?
          JDOM與JAXB的比較,從本身的特點來看:?
          1)?JDOM比JAXB更容易上手。使用JAXB首先要會編寫DTD,然后還要會編寫綁定模式。JDOM沒有這樣的要求,如果你會Java和XML,甚至可以說光是看JDOM的javadoc文檔就能夠使用JDOM。?
          2)?JAXB編寫好DTD和綁定模式以后,XML文檔被映射成了Java對象,其數(shù)據(jù)就是Java對象的屬性,連數(shù)據(jù)類型都做好了轉(zhuǎn)換,因此,訪問XML文檔比JDOM要簡便,可以說是一勞永逸。?
          3)?JAXB由某個DTD和綁定模式生成的代碼只能訪問該DTD所約束的文檔。如果想要訪問其他XML文檔,需要再編寫DTD和綁定模式。JDOM可以處理任何XML文檔,包括受約束的和不受約束的。?

          目 前JDOM和JAXB都沒有正式版本。JDOM的最新版本是beta8,JAXB是1.0?early?access,其規(guī)范版本是0.21。相對而言, JDOM更成熟一些。例如JAXB不支持名字空間、不能向XML文檔寫入處理指令,有時我們需要保留的換行符和首尾空格在JAXB中自動過濾掉了,就連放 在<![CDATA[?和?]]>里面也不能幸免。JDOM就沒有這些限制。如果說以上的3點比較是JDOM和JAXB本身的特點所決定的, 幾乎不可能改變,那么這里表明,JAXB還需要更多的工作。?

          (二)獲得并安裝JDOM?
          在http://jdom.org可以 下載JDOM的最新版本。以JDOM?beta8的2進制版本為例。下載后解壓縮,JDOM的jar文件就是build目錄下的文件jdom.jar,將 之加入類路徑。另外JDOM還需要lib目錄下那些jar文件如xerces.jar的支持。如果在使用中出現(xiàn)以下錯誤:?
          java.lang.NoSuchMethodError?
          或?
          java.lang.NoClassDefFoundError:?org/xml/sax/SAXNotRecognizedException?
          你需要保證xerces.jar文件在CLASSPATH中位于其他XML類,如JAXP或Crimson之前,這些類文件,包括以前老版本的xerces,可能不支持SAX2.0或DOM?Level?2。于是導致了上面的錯誤。?

          (三)一個簡單的例子?
          JDOM的處理方式有些類似于DOM,但它主要是用SAX實現(xiàn)的,你不必擔心處理速度和內(nèi)存的問題。另外,JDOM中幾乎沒有接口,的類全部是實實在在的類,沒有類工廠類的。其最重要的一個包org.jdom中主要有以下類:?
          ??Attribute?
          ??CDATA?
          ??Comment?
          ??DocType?
          ??Document?
          ??Element?
          ??EntityRef?
          ??Namespace?
          ??ProcessingInstruction?
          ??Text?
          數(shù)據(jù)輸入要用到XML文檔要通過org.jdom.input包,反過來需要org.jdom.output。如前面所說,關(guān)是看API文檔就能夠使用。?
          我們的例子讀入XML文件exampleA.xml,加入一條處理指令,修改第一本書的價格和作者,并添加一條屬性,然后寫入文件exampleB.xml:?
          //exampleA.xml?
          <?xml?version="1.0"?encoding="GBK"?>?
          <bookList>?
          ???<book>?
          ???????<name>Java編程入門</name>?
          ???????<author>張三</author>?
          ???????<publishDate>2002-6-6</publishDate>?
          ???????<price>35.0</price>?
          ???</book>?
          ???<book>?
          ???????<name>XML在Java中的應用</name>?
          ???????<author>李四</author>?
          ???????<publishDate>2002-9-16</publishDate>?
          ???????<price>92.0</price>?
          ???</book>?
          </bookList>?

          ?
          ?
          ---------------------------------------------------
          import?org.jdom.*;
          import?org.jdom.input.*;
          import?org.jdom.output.*;
          import?java.io.*;
          public?class?cute{

          public?static?void?main(String?args[]){
          try{

          org.jdom.input.SAXBuilder?sb=new?org.jdom.input.SAXBuilder();
          //創(chuàng)建文檔
          org.jdom.Document????doc=sb.build(new?FileInputStream("c:\\example.xml");
          //加入一條處理指令
          org.jdom.ProcessingInstruction?pi?=?new?ProcessingInstruction("xml-stylesheet","href=\"bookList.html.xsl\"?type=\"text/xsl\"";
          //把這條處理指令,加入文檔中
          doc.addContent(pi);
          //獲得這個文檔得跟元素
          org.jdom.Element?el=doc.getRootElement();
          //獲得這個跟元素,的所有子元素
          java.util.List?ls=el.getChildren();
          //得到第一個子元素
          org.jdom.Element?book=(Element)ls.get(0);
          //給這個字元素添加一條屬性
          org.jdom.Attribute?attr=new?Attribute("hot","true";
          book.setAttribute(attr);

          //獲得這個元素的子元素,(指定)
          org.jdom.Element?el2=book.getChild("author";
          //輸出這個元素的值
          System.out.println(el2.getName());
          //給這個元素的值改個名字
          el2.setText("cute";

          //再指定元素獲得這個值
          org.jdom.Element?el3=book.getChild("price";
          //給這個值換個值
          el3.setText(Float.toString(50.0f));
          String?a="";
          boolean?bool=true;

          org.jdom.output.XMLOutputter?xml=?new?org.jdom.output.XMLOutputter(a,bool,"gb2312";
          xml.output(doc,new?FileOutputStream("c:\\cute.xml");

          }catch(Exception?e){
          System.out.println(e.getMessage());

          }



          }
          }

          posted @ 2006-04-06 18:18 sparkwu 閱讀(762) | 評論 (0)編輯 收藏

          (轉(zhuǎn))應用JDOM處理數(shù)據(jù)庫到XML轉(zhuǎn)換的JSP實現(xiàn)

               摘要: 一、 JDOM 介紹 我們知道 DOM 是用于與平臺和語言無關(guān)的方式表示 XML ...  閱讀全文

          posted @ 2006-04-06 10:18 sparkwu 閱讀(518) | 評論 (0)編輯 收藏

          2006年3月11日 #

          (轉(zhuǎn))JDBC應用

          使用JDBC進行訪問數(shù)據(jù)庫,首先要確保安裝和運行了您選擇的數(shù)據(jù)庫,并且驅(qū)動程序可用。(可以從 http://industry.java.sun.com/products/jdbc/drivers 下載 JDBC 驅(qū)動程序)
          Java與數(shù)據(jù)庫交互通常由以下幾步組成:
               1.裝入數(shù)據(jù)庫驅(qū)動程序 (JDBC 驅(qū)動程序或 JDBC-ODBC 橋) 。
               2.創(chuàng)建數(shù)據(jù)庫的 Connection。
               3.創(chuàng)建一個 Statement 對象。該對象實際執(zhí)行 SQL 或存儲過程。
               4.創(chuàng)建一個 ResultSet,然后用執(zhí)行查詢的結(jié)果填充(如果目標是檢索或直接更新數(shù)據(jù))。
               5.從 ResultSet 檢索或更新數(shù)據(jù)。

          一、實例化驅(qū)動

          訪問數(shù)據(jù)庫,先裝入 JDBC 驅(qū)動程序,然后由 DriverManager創(chuàng)建與數(shù)據(jù)庫相應的驅(qū)動程序的連接來確定。使用Class.forName() 直接裝入,向 DriverManager 注冊
          示例:
          public class Pricing extends Object {

             public static void main (String args[]){

                 String driverName = "JData2_0.sql.$Driver";

                try {
                   Class.forName(driverName);
                } catch (ClassNotFoundException e) {
                   System.out.println("Error creating class: "+e.getMessage());
                }
             }
          }

          二、創(chuàng)建Connection

          示例:
          import java.sql.Connection;
          import java.sql.DriverManager;
          import java.sql.SQLException;

          public class Pricing extends Object {
             public static void main (String args[]){
                String driverName = "JData2_0.sql.$Driver";
                String connectURL = 
                "jdbc:JDataConnect://127.0.0.1/pricing";
                Connection conn = null;   
                try
                {
                   Class.forName(driverName);
                   conn = DriverManager.getConnection(connectURL);
                } catch (ClassNotFoundException e) {
                   System.out.println("Error creating class: "+e.getMessage());
                } catch (SQLException e) {
                    System.out.println("Error creating connection:"+e.getMessage());
                }
                finally {
                   System.out.println("Closing connections...");
                   try {
                      conn.close();
                   } catch (SQLException e) {
                      System.out.println("Can't close connection.");
                   }
                }

             }
          }
          各種數(shù)據(jù)庫使用JDBC連接的方式
          //DB2
          String driverName = "com.ibm.db2.jcc.DB2Driver";
          String connectURL = "jdbc:db2://localhost:5000/sample";
          Class.forName(driverName);
          Connection conn = DriverManager.getConnection(connectURL,”user”,”password”);

          //Oracle(thin模式)
          Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
          String url="jdbc:oracle:thin:@localhost:1521:orcl";
          String user="test";
          String password="test";
          Connection conn= DriverManager.getConnection(url,user,password);

          //SQL
          Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
          String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb"; String user="sa";
          String password="";
          Connection conn= DriverManager.getConnection(url,user,password);

          //Sybase
          Class.forName("com.sybase.jdbc.SybDriver").newInstance();
          String url =" jdbc:sybase:Tds:localhost:5007/myDB";
          Properties sysProps = System.getProperties();
          SysProps.put("user","userid");
          SysProps.put("password","user_password");
          Connection conn= DriverManager.getConnection(url, SysProps);

          //MySQL
          Class.forName("org.gjt.mm.mysql.Driver").newInstance();
          String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" Connection conn= DriverManager.getConnection(url);

          //ACCESS
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
          String url="jdbc:odbc:Driver={MicroSoft Access Driver(*.mdb)};DBQ="+application.getRealPath("/Data/MyDb.mdb");
          Connection conn = DriverManager.getConnection(url,"","");
          Statement stmtNew=conn.createStatement() ;

          三、創(chuàng)建 Statement 對象

          Statement 對象用于將 SQL 語句發(fā)送到數(shù)據(jù)庫中。有三種 Statement 對象,它們都作為在給定連接上執(zhí)行 SQL 語句的包容器:Statement、PreparedStatement(它從Statement 繼承而來)和 CallableStatement(它從 PreparedStatement 繼承而來)。它們都專用于發(fā)送特定類型的 SQL 語句: Statement 對象用于執(zhí)行不帶參數(shù)的簡單SQL 語句;PreparedStatement 對象用于執(zhí)行帶或不帶 IN 參數(shù)的預編譯 SQL 語句(當要反復執(zhí)行某一特定查詢時,PreparedStatement 可能最有用);CallableStatement 對象用于執(zhí)行對數(shù)據(jù)庫已存儲過程的調(diào)用。CallableStatement 和 PreparedStatement之間的一個區(qū)別是:除了通常創(chuàng)建的 ResultSet 之外,CallableStatement 還可以提供 OUT 參數(shù)

          Statement實例:
          在程序中增加
          import java.sql.Statement;
          在程序生成Connection對象后,利用該對象生成Statement 對象
          Statement statement = null;
                try {
                   statement = conn.createStatement();
                } catch (SQLException e) {
                   System.out.println("SQL Error: "+e.getMessage());
                }

          PreparedStatement實例
          ...
           statement = conn.prepareStatement("select * from test where "+ "id < ? and id > ?");
           statement.setInt(1, 5);
           statement.setInt(2, 10);
           resultset = statement.executeQuery(); 
          ...
          CallableStatement實例

          四、執(zhí)行Statement

          Statement 接口提供了三種執(zhí)行 SQL 語句的方法:executeQuery、executeUpdate 和execute。使用哪一個方法由 SQL 語句所產(chǎn)生的內(nèi)容決定。

            方法 executeQuery 用于產(chǎn)生單個結(jié)果集的語句,例如 SELECT 語句。
            方法 executeUpdate 用于執(zhí)行 INSERT、UPDATE 或 DELETE 語句以及 SQL DDL(數(shù)據(jù)定義語言)語句,例如 CREATE TABLE 和 DROP TABLE。INSERT、UPDATE 或DELETE 語句的效果是修改表中零行或多行中的一列或多列。executeUpdate 的返回值是一個整數(shù),指示受影響的行數(shù)(即更新計數(shù))。對于 CREATE TABLE 或 DROP TABLE 等不操作行的語句,executeUpdate 的返回值總為零。
            方法 execute 用于執(zhí)行返回多個結(jié)果集、多個更新計數(shù)或二者組合的語句。

          示例:
          import java.sql.ResultSet;
          ResultSet Rs = null;
          在生成Statement后執(zhí)行
          Rs = statement.executeQuery("SELECT * FROM test");

          五、ResultSet

          ResultSet 被創(chuàng)建之后,它就有一個引用數(shù)據(jù)集內(nèi)相對位置的“指針”。在 ResultSet語句返回之后(即使表為空),該指針正好位于第一行的“上面”。要到達實際數(shù)據(jù)的第一行,應用程序調(diào)用 next() 方法。該方法返回一個 Boolean 值,指出在新位置處是否有行存在。如果沒發(fā)現(xiàn)數(shù)據(jù),則 next() 返回 false。
          Getxxx()與wasNull()
          ResultSet.getXXX 方法獲取常見的 JDBC 數(shù)據(jù)類型
          對非常大的行值使用流
          getBinaryStream 返回只提供數(shù)據(jù)庫原字節(jié)而不進行任何轉(zhuǎn)換的流。
          getAsciiStream 返回提供單字節(jié) ASCII 字符的流。
          getUnicodeStream 返回提供雙字節(jié) Unicode 字符的流。
          wasNull() 方法來確定是否有特定的數(shù)據(jù)片為空
          while (resultset.next()) {
          //根據(jù)字段名
          System.out.print(resultset.getString("id"));
          //根據(jù)索引
          System.out.print(resultset.getString(2));
          ……
          }
          通過ResultSetMetaData類還可以獲取元數(shù)據(jù)
          ...
          import java.sql.ResultSetMetaData;
          public class Pricing extends Object {
          ...
                Statement statement = null;
                ResultSet resultset = null;
                ResultSetMetaData resultmetadata = null;
                try {
                   statement = conn.createStatement();
                   resultset = statement.executeQuery("select * from products"); 
            
                   //Get the ResultSet information
                   resultmetadata = resultset.getMetaData();
                   //Determine the number of columns in the ResultSet
                   int numCols = resultmetadata.getColumnCount();
            
                   while (resultset.next()) {
                      for (int i=1; i <= numCols; i++) {
                         //For each column index, determine the column name
                         String colName = resultmetadata.getColumnName(i);
                         //Get the column value
                         String colVal = resultset.getString(i);
                         //Output the name and value
                         System.out.println(colName+"="+colVal);
                      }
                      //Output a line feed at the end of the row
                      System.out.println(" ");
                   }
          ...
          不必關(guān)閉 ResultSet;當產(chǎn)生它的 Statement 關(guān)閉、重新執(zhí)行或用于從多結(jié)果序列中獲取下一個結(jié)果時,該 ResultSet 將被 Statement 自動關(guān)閉。

          posted @ 2006-03-11 17:47 sparkwu 閱讀(631) | 評論 (0)編輯 收藏

          2006年2月5日 #

          工作之余.不忘記貼一些笑話

          一個MM和他男朋友的情話


          給LG織圍巾的時候不知為何事與LG爭辯,一氣之下告訴他:“圍巾不給你織了!”

              “那你給誰織?”LG瞪我。

              “管得著!就是捐獻災區(qū)也不給你!”

              “捐獻災區(qū)?“LG皺了皺眉頭:“我一個人嫌棄你的手藝也就罷了,何必連累災區(qū)人民。”

          什么類型

              和LG一起看電視,廣告中一出現(xiàn)美女LG便兩眼放光:“美女~~~”

              在他第N次兩眼放光時,我忍不住問他:“你到底喜歡什么類型的美女啊?“

              他很努力的想。我提示他:“是不是很嫵媚的那種?你不是最喜歡COCO嘛。“
             LG拼命點頭:“對啊對啊~~咦,不對,我還喜歡李鞍啊,她不是嫵媚型的。“

              “那我屬于什么類型啊?“

              “你啊……屬于亂七八糟型。“

              “你再說一次試試看……“

              “不是的,你是屬于……屬于……“LG想得十分辛苦的樣子,我瞪著他。

              “對啦~~~你是屬于--MIKE喜歡型~~嘿嘿~~“





            減肥記


              LG突然跟我說:“我覺得你胖了。“

              嚇了一大跳,趕緊去稱了一下體重,50KG,比以前胖了1KG。恨恨地瞪了LG一眼:

              “TMD,才兩斤肉啊,我都沒感覺你居然就知道了。“

              于是決定減肥。

              “我要去買根繩子。“我對LG宣布。

              LG大為緊張:“寶寶不要這么想不開啊,就是胖了點,不需要尋短見吧……“
              一腳踹了過去:“你巴不得我死啊,我只是想跳繩減肥!“

              “哦--“LG松了口氣,然后瞅瞅四周:“老婆你真打算跳繩啊,我怕你會把樓跳塌了……“

              惡狠狠的一口咬下去:“死小子,我是100斤,你當我是100公斤啊!!!!“
              因為缺少運動細胞加上懶惰,最終決定節(jié)食,也因為上班忙碌,常常忘了吃早飯,有一 天胃痛,賴在床上不肯上班。

              LG在電話里絮絮叨叨:“老婆去醫(yī)院看看啊,我是叫你運動減肥啊,誰讓你不吃飯的,看看現(xiàn)在胃病都出來了,跳繩容易把樓跳塌你可以練呼啦圈啊……“

             這死小子,到這時候了居然還在取笑我。怒從心頭起:“你敢嫌我胖啊!“

              LG還在不知死活的繼續(xù)游說:“老婆練呼啦圈嘛~~~“

              “你還嫌我胖!!!!!“

              “哦,不嫌棄的不嫌棄的。“他終于聽出我的怒氣。

              “哼,不嫌棄還讓我減肥!現(xiàn)在好了,都折騰出胃病來了,你賠你賠你賠!!!“

              “好好好,我賠!“

              “賠什么啊?“

              LG想了想,做痛下決心狀:“我就以身相許吧!“ 逛街


              LG喜歡逛街。這點我一直覺得他有異于別的男孩子,雖然他逛街看美女的時間比看衣服多。

              和LG逛街聽到他說的最多的話就是:“剛才過去一個美女……“(吸住口水的聲音)

              我通常是頭也不回:“看到帥哥記得告訴我。“

              他馬上把臉湊到我眼前:“看吧!帥哥!“

              我和LG都喜歡逛禮品店,喜歡可愛或者奇異的小玩意。

              很多店都會把很可愛的小貓小狗小豬掛在店堂上方做裝飾。我通常一進店門就會和LG說:“你跑這么高掛上面做什么。“然后LG就會在眾多小動物中仔 細搜索,直到發(fā)現(xiàn)一只小豬掛在上面,就回頭怒視我:“明明是你!“(我都覺得奇怪,這么多小動物,他為什么一定認為我是拿那只小豬形容他呢?)

              此后LG和我逛街只要看到小豬造型的玩具,他就會和我搶著說:“這個是你。“說得比我慢了就怒目相向,好象被我一說他真的就成了那只小豬,說得比我快了就得意洋洋,好象我就成了那只小豬。

              一次我看中一只抱抱熊,在柜臺的最上面,我正想叫他幫我拿,卻見他指著自己前面一只超可愛的小豬撲滿念念有辭:“這個是你……“

              我扯扯他的衣服:“把上面那只抱抱熊拿過來。“

              他把抱抱熊拿給我后又指著那只小豬撲滿最后確認似的跟我重復了一次:“這個是你!“

              ……¥%……-*$%^&&*$##


            關(guān)于“豬“



              我喊他小豬。

              他頗有意見:“我哪里象豬了?“

              敲他的頭:“笨啊,只是愛稱嘛,你要象豬誰要你啊。“

              他若有所思的看我:“我覺得你倒蠻象小豬的,這么懶這么能吃還這么能睡。“

              我惡狠狠的瞪他:“你說誰???“

              “沒有沒有,不是說你……“他笑容滿面。

              剛一轉(zhuǎn)身,聽見他小聲嘀咕:“這年頭,說真話不保險啊……“

              看雜志的時候看到一項調(diào)查,女孩子大都喜歡喊自己的愛人“小豬“。

              大喜,急忙拿給他看:“是潮流哦,原來這么多MM英雄所見略同啊。“

              得意中……

              卻見他不解的看我:“你們女孩子都這么喜歡做母豬?“

              ¥%……-*$%^&&*$##

              他加班到很晚,回家已是困的睜不開眼。聽見我喊他小豬,他趴在床上開始嘀咕:“還是做豬比較幸福哦,每天可以吃了睡睡了吃,什么事都不用做。“

              “是呀,最后被送到屠宰場。“我拍拍他的頭。

              “那太慘了點!“他突然睜開眼睛十分清醒的說:“還是做種豬比較好!“

              等我反應過來他已經(jīng)睡得象只死豬……


            愛要怎么說出口



              “你是不是不喜歡我了?“我問他。

              “誰說的。“他看雜志,頭也不抬。

              “我說的!“

              “有什么證據(jù)?“

              “那你愛我嗎?“

              “恩!“

              “恩是什么意思?“

              “L-O-V-E“(每個字母分開念)

              “不許說鳥語。“

              他想了想“W-O A-I N-I“(按英語字母的發(fā)音,繼續(xù)每個字母分開念)

              “聽不懂!“

              沒轍。

              “愛!“

              “愛誰?“

              “你!“

              “把話說完整了!“

              沉默……

              “說不說?不說不許吃飯不許睡覺!“

              妥協(xié)。

              “我愛你!“

              勝利!

              “這可是你自愿說的哦,我可沒逼你哦。“

              ¥%……-*$%^&&*$##


            賣玫瑰的小女孩



              和LG去火知了酒吧。在門口被一賣花的小女孩攔住。

              “哥哥買束玫瑰送給你的女朋友吧。“

              無視。

              小女孩不屈不撓:“哥哥,買束玫瑰送給你的女朋友吧,鮮花送美女呀。“

              LG馬上停下腳步四下張望:“啊?美女?美女呢?在哪?“


          ====================================

          1. 獵人打獵,看樹上有兩只鳥,舉槍打下一只,發(fā)現(xiàn)是只沒毛的,正納悶,另一只鳥飛下來大罵獵人:他*的,老子剛哄她把衣服脫光,你就把她打下來了。。。

          2.農(nóng)夫要殺公雞卻逮不著,于是抓起母雞對公雞說:再不下來讓你當光棍兒!公雞:你他媽以為我傻呀,我下去她就成寡婦了。。。

          3.一次軍事演習中,一顆炮彈偏離很遠,派去查看的士兵發(fā)現(xiàn):炮彈落在農(nóng)田里,田中正站著你,你衣衫破碎滿面漆黑飽含熱淚地說:偷顆白菜犯得著用炮彈轟???

          4.京九鐵路通車,沿線市民路邊觀看,車上一女客換衛(wèi)生巾后扔出窗外,迎面貼一市民臉上,市民拿下后說:我***!這車就是快,飄張紙都能把鼻子打出血來!!!

          5.有兩個造假鈔的不小心造出面值15元的假鈔,兩人決定拿到偏遠山區(qū)花掉,當他們拿一張15元買了1元的糖葫蘆后,他們哭了,農(nóng)民找了他們兩張7塊的(7塊的!!...)

          6.農(nóng)民趕驢進城,遇到無賴,無賴:吃飯沒?農(nóng)民說:吃了。無賴:我問的是驢。農(nóng)民一聽,轉(zhuǎn)身對驢扇兩耳光:媽的,城里有親戚也不說一聲

          =======================

          文革串聯(lián)時期,火車異常擁擠,某君趁停車將屁股伸出車窗外大便。車將啟動時,列車員作最后巡視時大喊:禿頭叨雪茄煙的那小子,把腦袋縮回去!

          蛔蟲父子趴在屁眼向外看,兒子問藍色的什么,父:藍天,兒:那綠色的吶?父:大地。兒:外面的世界真美好,為什么我們要呆在屁眼里?父莊嚴地說:因為這是我們的祖國!


          懸崖上一只小老鼠揮舞著短短的前爪,一次又一次跳下去,努力學習飛翔,旁邊母蝙蝠看著它摔的頭破血流,憂心的說:它爹,要不告訴它,它不是咱親生的!

          森林里三只小動物在聊天,小豬說:現(xiàn)在流行用昵稱,你后你們就叫我小豬豬。小兔說:好,那我就叫做小兔兔。小雞一臉不高興說:我還有事,先走了!

          有個人第一次在集市上賣冰棍,不好意思叫賣,旁邊有一個人正高聲喊:賣冰棍!,他只好喊道:我也是。

          母蛤蟆為躲避一追求她的公蛤蟆而躲進狗洞里,公蛤蟆耐心的守在洞口,不一會從狗洞鉆出一只耗子,公蛤蟆傷心的說:難怪你不愛我了,原來狗給你買貂皮了。

          拉登與薩達姆在海邊散步,忽然有記者拍照,一見鏡頭,拉登做了V字手形,薩達姆問:登哥,我們勝利了嗎?拉登小聲曰:勝利個屁,我是告訴美國,別炸了,就剩我們倆了啊!

          一個士兵練習爬樹,忽然他從樹上掉下來,軍官問他為什么掉下來,他說有兩只松鼠跑到他褲襠里去了,這我還忍了,可是他們進去了說:咱們把果子分了吧!


          你蹲在海灘上拾貝殼,見一烏龜趴在沙坑中產(chǎn)卵,朋友為你拍下相片,歸來你大筆一揮寫道:我、王八、蛋!

          某學校學生趁下課十分鐘出校門,買2杯奶茶和2個芋頭。眼見上課鐘快響了,情急之下就對老板說:老板我要兩個奶頭!

          老鱉調(diào)戲河蚌,河蚌很生氣,張嘴咬住老鱉,老鱉忍痛拖著河蚌來回爬,青蛙見了敬佩地說:乖乖,鱉哥混大了,出入都夾著公文包了。

          一人給猴喂花生,猴總是往屁眼塞一下然后再吃,那人不解問管理員,答:它去年吃了個大桃,費好大勁才把核拉出來,所以現(xiàn)在它吃什么都得先量量。

          瘸子和瞎子同騎一輛車外出。瞎子騎,瘸子看路。突然瘸子發(fā)現(xiàn)前面有一條深溝,急呼:溝溝溝!瞎子回唱到:噢嘞噢嘞噢嘞!二人一起掉入溝中。。。。


          posted @ 2006-02-05 15:08 sparkwu 閱讀(379) | 評論 (0)編輯 收藏

          2005年10月21日 #

          多對多測試

          package com.dsii.eservice.creationservice.dao.test;

          import junit.framework.TestCase;
          import net.sf.hibernate.HibernateException;
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;

          import com.dsii.eservice.creationservice.dao.ArtDAO;
          import com.dsii.eservice.creationservice.po.ArtPO;
          import com.dsii.eservice.creatorservice.po.CreatorPO;

          public class ArtDAOTests extends TestCase {


           private Log log = LogFactory.getLog(ArtDAOTests.class);

           private static Integer pInsertKey1;
           private static Integer pInsertKey2;
           private static Integer pInsertKey3;
           private static Integer pInsertKey4;
           private static Integer pInsertKey5;
           private static Integer pInsertKey6;

           public ArtDAOTests(String arg0) {
            super(arg0);
           }

           /*
            * @see TestCase#setUp()
            */
           protected void setUp() throws Exception {
            super.setUp();
           }

           /*
            * @see TestCase#tearDown()
            */
           protected void tearDown() throws Exception {
            super.tearDown();
           }

           /**
            *
            * <p><code>testInsertObject</code></p>
            *
            * @authorspark 2005-8-3
            * @since1.0
            */
           public void testInsertObject() throws HibernateException {

            log.debug("----------testInsertObject start-------------");
            ArtPO artPO1 = new ArtPO();
            artPO1.setArtId(new Integer(1));
            artPO1.setArtTypeId(new Integer(6));
            artPO1.setArtName("spark");
            
            ArtPO artPO2 = new ArtPO();
            artPO2.setArtId(new Integer(2));
            artPO2.setArtTypeId(new Integer(7));
            artPO2.setArtName("spark2");
            
            ArtPO artPO3 = new ArtPO();
            artPO3.setArtId(new Integer(3));
            artPO3.setArtTypeId(new Integer(8));
            artPO3.setArtName("spark3");

            CreatorPO creatorPO1 = new CreatorPO();
            creatorPO1.setArtCreatorId(new Integer(31));
            CreatorPO creatorPO2 = new CreatorPO();
            creatorPO2.setArtCreatorId(new Integer(32));
            CreatorPO creatorPO3 = new CreatorPO();
            creatorPO3.setArtCreatorId(new Integer(37));
            //artPO1
            artPO1.getCreatorSet().add(creatorPO1);
            artPO1.getCreatorSet().add(creatorPO2);
            artPO2.getCreatorSet().add(creatorPO2);
            artPO2.getCreatorSet().add(creatorPO3);
            artPO3.getCreatorSet().add(creatorPO1);
            artPO3.getCreatorSet().add(creatorPO3);
            //creatorPO1
            creatorPO1.getArtSet().add(artPO1);
            creatorPO1.getArtSet().add(artPO2);
            creatorPO2.getArtSet().add(artPO2);
            creatorPO2.getArtSet().add(artPO3);
            creatorPO3.getArtSet().add(artPO1);
            creatorPO3.getArtSet().add(artPO3);

            //  artPO.setArtsize("big");
            //  artPO.setArtCreatedYear("CreatedYear1");
            //  artPO.setArtDrawedBird("DrawedBird1");
            //  artPO.setOriginal("original1");
            //  artPO.setDepostion("top");
            //  artPO.setIntroduction("china1");
            //  artPO.setArtFileURL("  //  artPO.setModifyDate(TimeUtils.getCurrentTimestamp());
              try {
               log.info("----------pInsertKey1 insertObject(artPO1) start-------------");
               pInsertKey1 = (Integer) ArtDAO.getInstance().insertObject(artPO1);
               pInsertKey2 = (Integer) ArtDAO.getInstance().insertObject(artPO2);
               pInsertKey3 = (Integer) ArtDAO.getInstance().insertObject(artPO3);
               pInsertKey4 = (Integer) ArtDAO.getInstance().insertObject(creatorPO1);
               pInsertKey5 = (Integer) ArtDAO.getInstance().insertObject(creatorPO2);
               pInsertKey6 = (Integer) ArtDAO.getInstance().insertObject(creatorPO3);
               log.debug("--------pInsertKey ==---------------" + pInsertKey1);
              } catch (Exception e) {
               e.printStackTrace();
              }
           }

           /**
            * <p><code>testFindByPrimeryKey</code></p>
            */
           // public void testFindByPrimeryKey() {
           //  log.debug("--------testFindByPrimeryKey start---------------");
           //
           //  Integer pk = pInsertKey;
           //  try {
           //   ArtPO po = (ArtPO) ArtDAO.getInstance()
           //     .findByPrimeryKey(new Integer(1));
           //   assertEquals("1", po.getArtId());
           //   assertEquals("inCreator", po.getCreator());
           //   log.debug("--------BirdsPO==---------------" + po);
           //  } catch (Exception e) {
           //   e.printStackTrace();
           //  }
           //  log.debug("--------testFindByPrimeryKey end---------------");
           // }

          }

          posted @ 2005-10-21 09:45 sparkwu 閱讀(395) | 評論 (0)編輯 收藏

          2005年9月1日 #

          Blob字段

           從CSDN上看到的感覺挺有用的

                最近幾次碰到這個問題,需求是將一個文件或者文件流存儲到Oracle數(shù)據(jù)庫里,
          Oracle8提供了Blob和Clob用來存儲二進制大對象數(shù)據(jù),可是它和Java.sql.里面的Blob
          不兼容,經(jīng)常導致Blob字段無法鎖定或者操作失敗,總之我總結(jié)了一些經(jīng)驗
          大家共享
          首先建立測試數(shù)據(jù)表
           drop table filelist;
           commit;
           
           CREATE TABLE SYSTEM.FILELIST (
           "FILENAME" VARCHAR2(50) NOT NULL,
           "FILESIZE" NUMBER(20)  NULL,
           "FILEBODY" BLOB  NULL, 
           PRIMARY KEY("FILENAME"), UNIQUE("FILENAME")) ;
           commit;


                 測試過程,首先將硬盤文件讀入數(shù)據(jù)庫,然后再讀出到硬盤的另一個新文件里,原碼如下:


          /**
          * @author 秋南(Ryan)
          * @email  guoyf@sinosoft.com.cn
          * @version 2002 1 14
          */
          import java.io.*;
          import java.util.*;
          import java.sql.*;
          import oracle.sql.*;
          import oracle.jdbc.driver.*;
          import java.text.*;

          public class test
          {
           public static void main(String args[]) throws java.io.IOException,java.sql.SQLException
           {
            dbBean db1=new dbBean();
            /**
            *這里是我的數(shù)據(jù)聯(lián)接Bean
            *大家可以用自己的連接Bean
            */
            byte a[]=null;//**將測試文件test.doc讀入此字節(jié)數(shù)組
            java.io.FileInputStream fin=null;
            java.io.FileOutputStream fout=null;
            oracle.jdbc.OracleResultSet ors=null;//**這里rs一定要用Oracle提供的
            oracle.jdbc.driver.OraclePreparedStatement opst=null;//**PreparedStatement用

                                                                                        //Oracle提供的
             
            try
            {
             
             java.io.File f1=new java.io.File("c:/temp/test.doc");
             java.io.File f2=new java.io.File("c:/temp/testout.doc");//**從BLOB讀出的信息寫

                                                                           //入該文 件,和源文件對比測試用
             fin=new java.io.FileInputStream(f1);
             fout=new java.io.FileOutputStream(f2);
             
             
             int flength=(int)f1.length();//**讀入文件的字節(jié)長度
             System.out.println("file length::"+flength);
             a=new byte[flength];
             
             int i=0;int itotal=0;
             /**將文件讀入字節(jié)數(shù)組
             for (;itotal<flength;itotal=i+itotal )
             {
              
              i=fin.read(a,itotal,flength-itotal);
              
             }
             fin.close();
             
             System.out.println("read itotal::"+itotal);
            /**注意Oracle的 BLOB一定要用EMPTY_BLOB()初始化 
            String mysql="insert into filelist (FileName,FileSize,FileBody) values (?,?,EMPTY_BLOB())";
            opst=(oracle.jdbc.driver.OraclePreparedStatement)db1.conn.prepareStatement(mysql);
                   opst.setString(1,"wordtemplate");
                     opst.setInt (2,flength);
                   opst.executeUpdate();
                   opst.clearParameters();
                   /**插入其它數(shù)據(jù)后,定位BLOB字段
                     mysql="select filebody from filelist where filename=?";
                     opst=(oracle.jdbc.driver.OraclePreparedStatement)db1.conn.prepareStatement(mysql);
                     opst.setString(1,"wordtemplate");
                     ors=(oracle.jdbc.OracleResultSet)opst.executeQuery();
                     if (ors.next())
                     {
                    
                     oracle.sql.BLOB blob=ors.getBLOB(1);/**得到BLOB字段          
                     int j=blob.putBytes(1,a);/**將字節(jié)數(shù)組寫入BLOB字段
                     System.out.println("j:"+j);
                               
                     db1.conn.commit();
                     ors.close();
                     }        
                    
               System.out.println("insert into ok");
              
              byte b[]=null;/**保存從BLOB讀出的字節(jié)
              opst.clearParameters();
                     mysql="select filebody from filelist where filename=?";
                     opst=(oracle.jdbc.driver.OraclePreparedStatement)db1.conn.prepareStatement(mysql);
                     opst.setString(1,"wordtemplate");
                     ors=(oracle.jdbc.OracleResultSet)opst.executeQuery();
                     if (ors.next())
                     {
                     oracle.sql.BLOB blob2=ors.getBLOB(1); 
                    
                     System.out.println("blob2 length:"+blob2.length());
                     b=blob2.getBytes(1,flength);/**從BLOB取出字節(jié)流數(shù)據(jù)
                     System.out.println("b length::"+b.length);
                     db1.conn.commit();
                     } 
                     ors.close();
                     /**將從BLOB讀出的字節(jié)寫入文件
                     fout.write(b,0,b.length);
                     fout.close();  
              
               System.out.println("write itotal::"+b.length);
                          
             
            }
            catch(Exception e)
            {
             System.out.println("errror :"+e.toString() );
             e.printStackTrace();
             
            }
            finally
            { /**關(guān)閉所有數(shù)據(jù)聯(lián)接
             stmt.close();
             db1.closeConn();
            }
            

            
           }
          }
              編譯運行在TomCat下調(diào)試通過。
              需要注意的是Blob存取的過程,一般先存入和BLOB相關(guān)的控制數(shù)據(jù),如文件的名字,
              然后查詢定位BLOB字段,利用OracleBlob提供的方法:
              public int putBytes(long pos,byte bytes[])
              public byte[]  getBytes(long pos,byte bytes[])
              或者利用
              public OutputStream getBinaryOutputStream() throws SQLException
              public InputStream  getBinaryStream() throws SQLException
             因為利用輸入輸出流總歸還是利用到字節(jié)數(shù)組緩沖流,所以就不舉例子了。

          posted @ 2005-09-01 21:57 sparkwu 閱讀(520) | 評論 (0)編輯 收藏

          僅列出標題  下一頁
          主站蜘蛛池模板: 荃湾区| 韩城市| 崇仁县| 高雄县| 土默特左旗| 云梦县| 灌阳县| 明星| 齐河县| 叶城县| 常山县| 江陵县| 江川县| 平顺县| 遂川县| 固始县| 乐都县| 河北省| 长海县| 长汀县| 溧阳市| 齐齐哈尔市| 东至县| 长垣县| 平潭县| 富锦市| 云和县| 靖州| 康定县| 仙游县| 房产| 牟定县| 罗源县| 永川市| 色达县| 济阳县| 青河县| 冷水江市| 卓资县| 景东| 巨野县|