QQ羣78928780記錄整理:90523技術話題-部分

一、404與405錯誤解決方案

二、Pageable接口及其分頁實現
付衛寧(313216444)
一個新的Pageable接口及其實現  這種方式實現分頁 有人用過嗎
我不太明白 在jsp頁面具體實現的代碼
賀一丁(66694180)
那最好還是具體問題具體談,先把錯誤說一下。
賀一丁(66694180)
你沒有在頁面頂部加入 ProductDao 的 import
付衛寧(313216444)
不報錯了 但是沒有從數據庫中讀出數據啊 
我用以前的方法是可以的 但是我想增加分頁 所以增加了一個pageable接口 
賀一丁(66694180)
爲什麼沒從數據庫讀數據,是不是你沒有實現
是取出來的數據沒有顯示,還是沒有從 SQL 執行結果中把數據取出來,還是根本就沒有執行 SQL,反正這樣順着查下去。
付衛寧(313216444)
一個新的Pageable接口及其實現
很顯然,看過上面三種實現方法後,我們對新的分頁機制有了一個目標,即:不與具體數據庫相關;儘可能做到代碼重用;儘可能與原JDBC接口的使用方法保持一致;儘可能高的效率。
首先,我們需要提供一個與java.sql.ResultSet向下兼容的接口,把它命名爲Pageable,接口定義如下:
public interface Pageable extends java.sql.ResultSet{
/**返回總頁數
*/
int getPageCount();
/**返回當前頁的記錄條數
*/
int getPageRowsCount();
/**返回分頁大小
*/
int getPageSize();
/**轉到指定頁
*/
void gotoPage(int page) ;
/**設置分頁大小
*/
void setPageSize(int pageSize);
/**返回總記錄行數
*/
int getRowsCount();
/**
* 轉到當前頁的第一條記錄
* @exception java.sql.SQLException 異常說明。
*/
void pageFirst() throws java.sql.SQLException;
/**
* 轉到當前頁的最後一條記錄
* @exception java.sql.SQLException 異常說明。
*/
void pageLast() throws java.sql.SQLException;
/**返回當前頁號
*/
int getCurPage();
}
這是一個對java.sql.ResultSet進行了擴展的接口,主要是增加了對分頁的支持,如設置分頁大小,跳轉到某一頁,返回總頁數等等。
接着,我們需要實現這個接口,由於這個接口繼承自ResultSet,並且它的大部分功能也都和ResultSet原有功能相同,所以這裏使用了一個簡單的Decorator模式。
PageableResultSet2的類聲明和成員聲明如下:
public class PageableResultSet2 implements Pageable {
protected java.sql.ResultSet rs=null;
protected int rowsCount;
protected int pageSize;
protected int curPage;
protected String command = "";
}
可以看到,在PageableResultSet2中,包含了一個ResultSet的實例(這個實例只是實現了ResultSet接口,事實上它是由各個數據庫廠商分別實現的),並且把所有由ResultSet繼承來的方法都直接轉發給該實例來處理。
PageableResultSet2中繼承自ResultSet的主要方法:
//……
public boolean next() throws SQLException {
return rs.next();
}
//……
public String getString(String columnName) throws SQLException {
try {
return rs.getString(columnName);
}
catch (SQLException e) {//這裏是爲了增加一些出錯信息的內容便於調試
throw new SQLException (e.toString() " columnName="
columnName " SQL=" this.getCommand());
}
}
//……
只有在Pageable接口中新增的方法才需要自己的寫方法處理。
/**方法註釋可參考Pageable.java
*/
public int getCurPage() {
return curPage;
}
public int getPageCount() {
if(rowsCount==0) return 0;
if(pageSize==0) return 1;
//calculate PageCount
double tmpD=(double)rowsCount/pageSize;
int tmpI=(int)tmpD;
if(tmpD>tmpI) tmpI ;
return tmpI;
}
public int getPageRowsCount() {
if(pageSize==0) return rowsCount;
if(getRowsCount()==0) return 0;
if(curPage!=getPageCount()) return pageSize;
return rowsCount-(getPageCount()-1)*pageSize;
}
public int getPageSize() {
return pageSize;
}
public int getRowsCount() {
return rowsCount;
}
public void gotoPage(int page) {
if (rs == null)
return;
if (page < 1)
page = 1;
if (page > getPageCount())
page = getPageCount();
int row = (page - 1) * pageSize 1;
try {
rs.absolute(row);
curPage = page;
}
catch (java.sql.SQLException e) {
}
}
public void pageFirst() throws java.sql.SQLException {
int row=(curPage-1)*pageSize 1;
rs.absolute(row);
}
public void pageLast() throws java.sql.SQLException {
int row=(curPage-1)*pageSize getPageRowsCount();
rs.absolute(row);
}
public void setPageSize(int pageSize) {
if(pageSize>=0){
this.pageSize=pageSize;
curPage=1;
}
}
PageableResultSet2的構造方法:
public PageableResultSet2(java.sql.ResultSet rs) throws java.sql.SQLException {
if(rs==null) throw new SQLException("given ResultSet is NULL","user");

rs.last();
rowsCount=rs.getRow();
rs.beforeFirst();

this.rs=rs;
}
這裏只是簡單的取得一個總記錄數,並將記錄遊標移回初始位置(before first),同時將參數中的ResultSet賦給成員變量。
Pageable的使用方法
因爲Pageable接口繼承自ResultSet,所以在使用方法上與ResultSet一致,尤其是在不需要分頁功能的時候,可以直接當成ResultSet使用。而在需要分頁時,只需要簡單的setPageSize, gotoPage,即可。
PreparedStatement pstmt=null;
Pageable rs=null;
……//構造SQL,並準備一個pstmt.
rs=new PageableResultSet2(pstmt.executeQuery());//構造一個Pageable
rs.setPageSize(20);//每頁20個記錄
rs.gotoPage(2);//跳轉到第2頁
for(int i=0; i
int id=rs.getInt(“ID”);
……//繼續處理
}
這是我參考的。。。
賀一丁(66694180)
猜也沒用,應該在適當的地方加上輸出,然後執行一下頁面看看哪些該輸出的地方沒有輸出,或者輸出內容不正確。
****************************************************************************************************
關於分頁,其實只要明白在數據庫的sql分頁語句如何寫,如在mysql中用limit,而在oracle中用rownum
然後,只需要在頁面與後臺間傳遞分頁參數即可實現,上面那個Pageable,大家可以注意看看如何實現分頁封閉的。
****************************************************************************************************


三、jsp斷點調試,你試過嗎?
**********************************************************************************
我測試了一下,在eclipse中調試jsp,在調試處加上<%=java代碼 %>,然後雙擊此處,並以
debug方式啓動tomcat.即可實現
***********************************************************************************

         以上話題在羣內有具體內容

         以上由羣管理員趙博偉整理

         本書不少篇章已經超出了技術的範疇,上升到人生髮展的高度,這也是副標題叫“人生需要引導” 的一個原因。加入QQ羣78928780,每週一個學習安排,多個學習小組等着你,還可分享各種根據聊天記錄整理的話題喲。

       《數據庫開發這點事》下載地址http://sites.google.com/site/howwe6/db



 

發佈了49 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章