亚洲成A人片在线观看中文,亚洲av鲁丝一区二区三区,亚洲AV色吊丝无码http://www.tkk7.com/ducktsmt/也許低調是最好的選擇zh-cnMon, 12 May 2025 20:38:58 GMTMon, 12 May 2025 20:38:58 GMT60用JDOM讀取XML示例http://www.tkk7.com/ducktsmt/articles/139123.html靈魂守護者靈魂守護者Fri, 24 Aug 2007 08:10:00 GMThttp://www.tkk7.com/ducktsmt/articles/139123.htmlhttp://www.tkk7.com/ducktsmt/comments/139123.htmlhttp://www.tkk7.com/ducktsmt/articles/139123.html#Feedback0http://www.tkk7.com/ducktsmt/comments/commentRss/139123.htmlhttp://www.tkk7.com/ducktsmt/services/trackbacks/139123.html/*
 * Created on 2004-8-21
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 
*/


import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

/**
 * 
@author kingwong
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 
*/

public class myJDOM {
 
public static void main(String[] args){
 SAXBuilder sb 
= new SAXBuilder();
 
try
 

 Document doc 
= sb.build("C:/ResultSet.xml");
 Element root 
= doc.getRootElement();
 
 String str1 
= root.getAttributeValue("type");
 System.out.println(
"Root Element's comment attribute is : " + str1);
 String str2 
= root.getChild("DataRow").getAttributeValue("size");
 System.out.println(
"sex Element's value attribute is : " + str2);
 String str3 
= root.getChildText("ShowRow");
 System.out.println(
"name Element's content is :" + str3);
 String str4 
= root.getChild("DataRow").getChildText("city_name");
 System.out.println(
"contact Element's telephone subelement content is : " + str4 + "\n");
 Element inputElement 
= root.getChild("Contact"); 
 inputElement.addContent(
new Element("email").setAttribute("value","wanghua@cyberobject.com"));
 XMLOutputter xmlOut 
= new XMLOutputter(Format.getPrettyFormat());
 String outStr 
= xmlOut.outputString(root);
 System.out.println(outStr);
 }

 
catch(Exception e)
 
{
 e.printStackTrace();
 }

}

}

另一個例子:
import org.jdom.*;
import org.jdom.input.*;
//import org.jdom.output.*;
import java.io.*;
import java.util.*;

public class Cute {

 
public static void main(String args[]) {
  
try {
   
/*
    * 用無變元構造函數構造一個SAXBuilder對象, 用sax解析器從文件中構造文檔,
    * SAXBuilder偵聽sax事件并從內存中建立一個相應的文檔
    
*/
   SAXBuilder sb 
= new SAXBuilder();
   
// 創建文檔
   Document doc = sb.build(new FileInputStream("c:/ResultSet.xml"));
   
// 加入一條處理指令
   ProcessingInstruction pi = new ProcessingInstruction(
     
"xml-stylesheet",
     
"href=\"bookList.html.xsl\" type=\"text/xsl\"");
   
// 把這條處理指令,加入文檔中
   doc.addContent(pi);
   
// 獲得這個文檔的根元素
   Element el = doc.getRootElement();
   
   printElement(el);
/*   
   // 得到第一個子元素的子元素,卻完全忽略其內容
   Element book = (Element) ls.get(0);
   // 給這個子元素添加一條屬性,
   Attribute attr = new Attribute("hot", "true");
   book.setAttribute(attr);
   // 獲得這個元素的子元素(指定)以及其值
   Element el2 = book.getChild("author");
   // 輸出這個元素的值
   System.out.println(el2.getName());
   // 給這個元素的值改個名字
   el2.setText("cute");
   // 再獲得這個元素的子元素(指定)
   Element el3 = book.getChild("price");
   // 給這個值換個值
   el3.setText(Float.toString(50.0f));
   XMLOutputter xml = new XMLOutputter();
   xml.output(doc, new FileOutputStream("cute.xml"));
*/
  } 
catch (Exception e) {
   System.out.println(e.getMessage());

  }

 }
     
private static void printElement(Element el)
     {
         List ls 
= el.getContent();
         Iterator i 
= ls.iterator();
         
while (i.hasNext()) {
             Object o 
= i.next();
             
if (o instanceof Text)/*使用instanceof 來獲得所需要的內容*/
             {
                 Text t
=(Text)o;
                 System.out.println(
"Text: " + t.getText());}
             
else if(o instanceof Attribute)
                 System.out.println(
"Attribute: " + o);
             
else if (o instanceof Element)
             {
                 System.out.println(
"Element: " + ((Element) o).getName());
                 Element oe 
= (Element)o;
                 System.out.println(
"Value: "+oe.getValue());
             }
         }
     }
}


靈魂守護者 2007-08-24 16:10 發表評論
]]>
將JDBC返回的ResultSet轉換成XMLhttp://www.tkk7.com/ducktsmt/articles/139122.html靈魂守護者靈魂守護者Fri, 24 Aug 2007 08:06:00 GMThttp://www.tkk7.com/ducktsmt/articles/139122.htmlhttp://www.tkk7.com/ducktsmt/comments/139122.htmlhttp://www.tkk7.com/ducktsmt/articles/139122.html#Feedback0http://www.tkk7.com/ducktsmt/comments/commentRss/139122.htmlhttp://www.tkk7.com/ducktsmt/services/trackbacks/139122.htmlimport org.jdom.*;
import org.jdom.output.*;
import java.sql.*;
import java.io.*;

public class GenerateXMLView {
    
    
/** Creates a new instance of GenerateXMLView */
    
public GenerateXMLView() {
    }
    
    
public static void main(String[] args) throws Exception {
        WriteXMLtoFile();
    }
    
    
public static void WriteXMLtoFile()
    {
        String driver 
= "org.apache.derby.jdbc.EmbeddedDriver";
        String dbName
="/derby/demo/databases/toursdb";
        String connectionURL 
= "jdbc:derby:" + dbName; 
        Connection conn 
= null;
        Statement st 
= null;
        ResultSet rs 
= null;
        ResultSetMetaData rmd 
= null;
        
        
try{
            Class.forName(driver); 
        } 
catch(java.lang.ClassNotFoundException e) {
            e.printStackTrace();
        }

        
try {
            conn 
= DriverManager.getConnection(connectionURL); 
            st
=conn.createStatement();
            rs
=st.executeQuery("SELECT distinct COUNTRY,CITY_NAME,AIRPORT FROM cities order by COUNTRY,CITY_NAME");
            rmd 
= rs.getMetaData();
            Document document 
= new Document(new Element("ResultSet")); //創建文檔ROOT元素
            document.getRootElement().setAttribute("type""sleep");
            
int colcount = rmd.getColumnCount();
            
while (rs.next()) {
                Element RowElement 
= new Element("DataRow");
                RowElement.setAttribute(
"size""XXXLarge");
                
for (int i = 1; i <= colcount; i++) {
                    Element TempElement
=new Element(rmd.getColumnName(i).toString().toLowerCase());
                    
//TempElement.setText(rs.getString(i));
                    TempElement.setAttribute("name",rmd.getColumnName(i).toString().toLowerCase());
                    TempElement.setAttribute(
"value",rs.getString(i));
                    TempElement.addContent(rs.getString(i));
                    RowElement.addContent(TempElement);
                }
                document.getRootElement().addContent(RowElement);
                Element RowElement2 
= new Element("ShowRow");
                RowElement2.setText(
"Just For Show");
                document.getRootElement().addContent(RowElement2);
                Element Contact 
= new Element("Contact").setText("tel");
                document.getRootElement().addContent(Contact);
            }
            rs.close();
            st.close();
            conn.close();
            XMLOutputter outp 
= new XMLOutputter(Format.getPrettyFormat()); //格式華輸出,產生縮進和換行
            Format format = outp.getFormat();
            format.setEncoding(
"UTF-8"); //設置語言
            format.setExpandEmptyElements(true); //設置輸出空元素為<sample></sample>格式
            outp.setFormat(format);
            outp.output(document, 
new FileOutputStream("C:/ResultSet.xml")); //輸出XML文檔
            System.out.print("XML 文檔生成完畢!");
        }  
catch (Exception e)  {   
            e.printStackTrace();
        }
    }
}


靈魂守護者 2007-08-24 16:06 發表評論
]]>
Hibernate實現分頁查詢的原理http://www.tkk7.com/ducktsmt/articles/139057.html靈魂守護者靈魂守護者Fri, 24 Aug 2007 03:01:00 GMThttp://www.tkk7.com/ducktsmt/articles/139057.htmlhttp://www.tkk7.com/ducktsmt/comments/139057.htmlhttp://www.tkk7.com/ducktsmt/articles/139057.html#Feedback0http://www.tkk7.com/ducktsmt/comments/commentRss/139057.htmlhttp://www.tkk7.com/ducktsmt/services/trackbacks/139057.htmlHibernate 可以實現分頁查詢,例如:
從第2萬條開始取出100條記錄
Query q = session.createQuery("from Cat as c");
q.setFirstResult(
20000);
q.setMaxResults(
100);
List l 
= q.list();

那么Hibernate底層如何實現分頁的呢?實際上Hibernate的查詢定義在net.sf.hibernate.loader.Loader這個類里面,仔細閱讀該類代碼,就可以把問題徹底搞清楚。Hibernate2.0.3的Loader源代碼第480行以下:

if (useLimit) sql = dialect.getLimitString(sql);
PreparedStatement st 
= session.getBatcher().prepareQueryStatement(sql, scrollable);

如果相應的數據庫定義了限定查詢記錄的sql語句,那么直接使用特定數據庫的sql語句。然后來看net.sf.hibernate.dialect.MySQLDialect:

public boolean supportsLimit() {   
  
return true;   
}   
public String getLimitString(String sql) {   
  StringBuffer pagingSelect 
= new StringBuffer(100);   
  pagingSelect.append(sql);   
  pagingSelect.append(
" limit ?, ?");   
  
return pagingSelect.toString();   
}  
這是MySQL的專用分頁語句,再來看net.sf.hibernate.dialect.Oracle9Dialect:
public boolean supportsLimit() {   
  
return true;   
}
   
  
public String getLimitString(String sql) {   
  StringBuffer pagingSelect 
= new StringBuffer(100);   
  pagingSelect.append(
"select * from ( select row_.*, rownum rownum_ from ( ");   
  pagingSelect.append(sql);   
  pagingSelect.append(
" ) row_ where rownum <= ?) where rownum_ > ?");   
  
return pagingSelect.toString();   
}

Oracle采用嵌套3層的查詢語句結合rownum來實現分頁,這在Oracle上是最快的方式,如果只是一層或者兩層的查詢語句的rownum不能支持order by。

除此之外,Interbase,PostgreSQL,HSQL也支持分頁的sql語句,在相應的Dialect里面,大家自行參考。

如果數據庫不支持分頁的SQL語句,那么根據在配置文件里面
#hibernate.jdbc.use_scrollable_resultset true
默認是true,如果你不指定為false,那么Hibernate會使用JDBC2.0的scrollable result來實現分頁,看Loader第430行以下:

if ( session.getFactory().useScrollableResultSets() ) {   
  
// we can go straight to the first required row   
  rs.absolute(firstRow);   
}   
else {   
  
// we need to step through the rows one row at a time (slow)   
  for ( int m=0; m<firstRow; m++ ) rs.next();   
}

如果支持scrollable result,使用ResultSet的absolute方法直接移到查詢起點,如果不支持的話,使用循環語句,rs.next一點點的移過去。

可見使用Hibernate,在進行查詢分頁的操作上,是具有非常大的靈活性,Hibernate會首先嘗試用特定數據庫的分頁sql,如果沒用,再嘗試Scrollable,如果不行,最后采用rset.next()移動的辦法。

在查詢分頁代碼中使用Hibernate的一大好處是,既兼顧了查詢分頁的性能,同時又保證了代碼在不同的數據庫之間的可移植性。

Oracle的這種實現如果有order by子句依然有問題。某些時候會導致翻頁有記錄重復或者遺失,很難找到規律,非常奇怪。

后來去google了一下,有Oracle專家說需要order by的時候必須帶上unique的字段,例如主鍵或者rowid等。

另外,在使用這種采用rownum的查詢時,盡管速度相對比較快,但是后臺Oracle在內存和CPU的消耗上會增加許多。其實除非結果集非常龐大(幾萬以上),并且必須翻倒很后面(skip的記錄很多),采用ResultSet.absolute方法性能還可以,并沒有數量級上的差別。



靈魂守護者 2007-08-24 11:01 發表評論
]]>
JavaDB+JSP+AJAX實現的級聯下拉菜單http://www.tkk7.com/ducktsmt/articles/138469.html靈魂守護者靈魂守護者Tue, 21 Aug 2007 15:00:00 GMThttp://www.tkk7.com/ducktsmt/articles/138469.htmlhttp://www.tkk7.com/ducktsmt/comments/138469.htmlhttp://www.tkk7.com/ducktsmt/articles/138469.html#Feedback48http://www.tkk7.com/ducktsmt/comments/commentRss/138469.htmlhttp://www.tkk7.com/ducktsmt/services/trackbacks/138469.html最近做的項目中涉及到5,6級的級聯菜單,用以前那種純JavaScript做起來實在是太低效了,頁面響應慢得跟286一樣。。。于是上網找AJAX實現的級聯菜單,找來找去找不到用DB+JSP+AJAX實現的。索性把人家的代碼拿來改了改,自己做了一個。
我之所以采用這個代碼作為修改的藍本,是因為這個代碼的服務端處理程序返回的是標準的XML序列,客戶端的JavaScript通過
var res = XMLHttpReq.responseXML.getElementsByTagName(String)
的方式來解析這個XML序列,再通過類似于
res[i].firstChild.data
的方式遍歷這個XML序列,從而找到所要的數據。這樣可以實現比較大的數據的AJAX操作,比那些只返回簡單String的例子要好得多了!反正我最討厭手動解析字符串了!
menu.jsp(文件的編碼也是UTF-8,我用EmEditor寫的,右下角那里可以更改文檔的編碼格式)

<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="UTF-8"%>
<%
    request.setCharacterEncoding(
"UTF-8");
    response.setContentType(
"text/html;charset=UTF-8");
%>
<html>
<head>
<META http-equiv=Content-Type content="text/html; charset=UTF-8">
<!--LINK href="images/css.css" type=text/css rel=stylesheet-->
</head>
<%
    
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
    
String dbName="/derby/demo/databases/toursdb";
    
String connectionURL = "jdbc:derby:" + dbName; 
    Connection conn 
= null;
    Statement st 
= null;
    ResultSet rs 
= null;
    List cities 
= new ArrayList();

    try{
        Class.forName(driver); 
    } catch(java.lang.ClassNotFoundException e) {
        e.printStackTrace();
    }

    try {
        conn 
= DriverManager.getConnection(connectionURL); 
        st
=conn.createStatement();
        rs
=st.executeQuery("SELECT distinct COUNTRY FROM cities order by COUNTRY");
        
while (rs.next())
        {
            cities.add(rs.getString(
1));
        }
        rs.close();
        st.close();
        conn.close();
    }  catch (Exception e)  {   
        e.printStackTrace();
    }
%>
<body>
<script language="javascript">
var XMLHttpReq;
    
var currentSort;
     
//創建XMLHttpRequest對象       
    function createXMLHttpRequest() {
        
if(window.XMLHttpRequest) { //Mozilla 瀏覽器
            XMLHttpReq = new XMLHttpRequest();
        }
        
else if (window.ActiveXObject) { // IE瀏覽器
            try {
                XMLHttpReq 
= new ActiveXObject("Msxml2.XMLHTTP");
            } 
catch (e) {
                
try {
                    XMLHttpReq 
= new ActiveXObject("Microsoft.XMLHTTP");
                } 
catch (e) {}
            }
        }
    }
    
//發送請求函數
    function sendRequest(url) {
        createXMLHttpRequest();
        XMLHttpReq.open(
"GET", url, true);
        XMLHttpReq.onreadystatechange 
= processResponse;//指定響應函數
        XMLHttpReq.send(null);  // 發送請求
    }
    
// 處理返回信息函數
    function processResponse() {
        
if (XMLHttpReq.readyState == 4) { // 判斷對象狀態
            if (XMLHttpReq.status == 200) { // 信息已經成功返回,開始處理信息
                updateMenu();
            } 
else { //頁面不正常
                  alert("您所請求的頁面有異常。");
            }
        }
    }
    
//更新菜單函數
    function updateMenu() {
        
var res=XMLHttpReq.responseXML.getElementsByTagName("res")
        
/**下面是用innerHTML輸出控件內容的一般用法**/
        
//var subMenu = "";
        //for(var i = 0; i < res.length; i++) {
        //    subMenu = subMenu + "  " + res[i].firstChild.data + "";
        //}
        //currentSort.innerHTML = subMenu;
        
        
var list = document.all.list;
        list.options.length
=0;
        list.add(
new Option("---請選擇---",""));
        
for(var i=0;i<res.length;i++){
            list.add(
new Option(res[i].firstChild.data,res[i].firstChild.data));
        }
    }
    
// 創建級聯菜單函數
    function showSubMenu(obj) {
        
//currentSort =document.getElementById(obj); 
        //currentSort.parentNode.style.display = "";
        sendRequest("menujsp.jsp?sort=" + obj);
        
/**下面這一句的作用是:每次選擇后回到第一個選項**/
        
//document.all.mli.options[0].selected=true;
    }

</script>
<select onchange="showSubMenu(this.options[this.options.selectedIndex].value)" name="mli"  style="width:150px">
<option value=''>---請選擇---</option>
<%
    
for(int i=0;i<cities.size();i++)
    {
        out.println(
"<option value='"+cities.get(i)+"'>"+cities.get(i)+"</option>");
    }
%>
</select>
<select name="list" onchange="if(this.selectedIndex)alert(this.options[this.options.selectedIndex].value)" style="width:100px">
<option name="">---請選擇---</option>
</select>
</body>
</html>
menujsp.jsp(文檔編碼格式也是UTF-8)
<%@ page contentType="text/html; charset=UTF-8" import="java.util.*,java.sql.*" %>
<%
    
String sort=request.getParameter("sort");
    
String driver = "org.apache.derby.jdbc.EmbeddedDriver";
    
String dbName="/derby/demo/databases/toursdb";
    
String connectionURL = "jdbc:derby:" + dbName; 
    Connection conn 
= null;
    Statement st 
= null;
    ResultSet rs 
= null;
    List cities 
= new ArrayList();

    
try{
        
Class.forName(driver); 
    } 
catch(java.lang.ClassNotFoundException e) {
        e.printStackTrace();
    }

    
try {
        conn 
= DriverManager.getConnection(connectionURL); 
        st
=conn.createStatement();
        rs
=st.executeQuery("SELECT CITY_NAME FROM cities where COUNTRY='"+sort+"'");
        
while (rs.next())
        {
            cities.add(rs.getString(
1));
        }
        rs.close();
        st.close();
        conn.close();
    }  
catch (Exception e)  {   
        e.printStackTrace();
    }
    response.setContentType(
"text/xml; charset=UTF-8");
    response.setHeader(
"Cache-Control""no-cache");
    out.println(
"<response>");
    
for(int i=0;i<cities.size();i++)
    {
        out.println(
"<res>" + cities.get(i).toString() + "</res>");
    }
    out.println(
"</response>");
    out.close();
%
>

數據庫版本是:db-derby-10.3.1.4,可以去www.apache.org下載。
把db-derby-10.3.1.4-bin.zip解壓到c:\derby下,用的示例數據庫是c:/derby/demo/databases/toursdb,注意路徑。
然后把derby下的derby.jar解壓到用于啟動Tomcat的那個JRE的ext目錄下,重啟TOMCAT,打開瀏覽器,訪問menu.jsp即可看到效果。
AJAX菜單效果圖
 
三級聯動的效果:

下載本例的JSP代碼:ajax_db_jsp_demo.rar
三級聯動下拉菜單:three_ajax_select_with_db.zip

靈魂守護者 2007-08-21 23:00 發表評論
]]>
主站蜘蛛池模板: 亚洲欧洲日韩极速播放 | 成人爽a毛片免费| 国产成人免费手机在线观看视频| 亚洲美女视频一区| 24小时免费看片| 亚洲图片中文字幕| 一个人免费观看视频www| 亚洲ts人妖网站| 成人片黄网站色大片免费| 中文有码亚洲制服av片| 久久精品无码一区二区三区免费| 亚洲黄色免费电影| 色欲色香天天天综合网站免费| 亚洲AV日韩AV永久无码免下载| 日本免费大黄在线观看| 久久亚洲精品国产精品| 69av免费视频| 亚洲成AV人片在WWW| 亚洲AV无码一区二三区| 亚洲免费在线观看| 亚洲伊人久久大香线蕉苏妲己| 国产成人精品免费视频大| 亚洲欧美日韩久久精品| 亚洲国产高清在线一区二区三区| caoporm碰最新免费公开视频| 国产成人精品日本亚洲| 精品国产sm捆绑最大网免费站| 亚洲va久久久久| 国产精品亚洲高清一区二区| 一个人看的www免费视频在线观看 一个人免费视频观看在线www | 亚洲国产无线乱码在线观看| 国产性生交xxxxx免费| 亚洲成a人无码亚洲成www牛牛| 亚洲av无码天堂一区二区三区| 国产VA免费精品高清在线| 一区二区三区亚洲| 国产精品免费观看久久| a高清免费毛片久久| 亚洲成人免费网址| 国产一区二区三区在线免费观看| 国产乱妇高清无乱码免费|