2011-05-10 83 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中,因此可能会出现语法错误。请修复它们:)