2011-05-10 47 views
1

我正在使用java。我有一張桌子,裏面有100行2列。考慮下面的查詢: -如何在SQL中指定限制和偏移

String id, lastId; 
ArrayList list=new ArrayList(); 
String query="select id from user limit 0,9"; 
selectStatement.execute(query); 
ResultSet rs=selectStatement.getResultSet(); 
while(rs.next()){ 
    id=rs.getString(1); 
    list.add(id); 
} 

如上所述,我給的10極限,但我想取到9迭代畢竟100 rows.So請告訴我如何從10日開始行rows.Is需要將id設置爲lastId.Please給我一些簡單的代碼。

+0

您正在使用'MySQL',對嗎? – Quassnoi 2011-05-10 10:00:26

回答

5

您已給出限制9,而不是10

從11'th取記錄20'th,使用方法:

SELECT id 
FROM user 
ORDER BY 
     id 
LIMIT 10, 10 

然後

SELECT id 
FROM user 
ORDER BY 
     id 
LIMIT 20, 10 

等。

請注意,您必須指定ORDER BY以確保記錄的順序一致。

0

聽起來就像你試圖實現分頁。你看看CachedRowSet中提供的尋呼支持嗎? (請參閱第10節,分頁數據)。

此示例代碼是從javadoc中舉起:

CachedRowSet crs = CachedRowSetImpl(); 
crs.setPageSize(100); 
crs.execute(conHandle); 

while(crs.next() { 
. . . // operate on first chunk of 100 rows in crs, row by row 
} 

while(crs.nextPage()) { 
    while(crs.next()) { 
     . . . // operate on the subsequent chunks (of 100 rows each) in crs, 
       // row by row 
    } 
} 
0

首先從MySQL

獲得的行數
String query = "SELECT COUNT(*) FROM user"; 
int count; 
selectStatement.execute(query); 
ResultSet rs=selectStatement.getResultSet(); 
while(rs.next()){  
count=rs.getInt(1);  
} 

然後通過循環迭代。

String id, int counter =1; 
ArrayList list=new ArrayList(); 

for(int i=1; i< count/10;i++) 
{ 
    query="select id from user limit " + i-1 +", " + (i *10)-1 ; 
    selectStatement.execute(query); 
    ResultSet rs=selectStatement.getResultSet(); 
    while(rs.next()){  
     id=rs.getString(1);  
     list.add(id); 
    } 
} 

由於您的代碼在Java中,因此可能會出現語法錯誤。請修復它們:)