如何在SQL中指定限制和偏移量

时间:2011-05-10 09:53:53

标签: java sql

我在java工作。我有一个表,有100行和2列。请考虑以下查询: -

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个限制。但我想要获取所有100行。所以请告诉我如何从迭代9行后的第10行开始。是否需要将id设置为lastId.Please给我一些简单的代码。

4 个答案:

答案 0 :(得分:5)

您已限制9,而不是10

要从第11位到第20位获取记录,请使用:

SELECT  id
FROM    user
ORDER BY
        id
LIMIT 10, 10

然后

SELECT  id
FROM    user
ORDER BY
        id
LIMIT 20, 10

等等。

请注意,您必须指定ORDER BY才能使记录的顺序保持一致。

答案 1 :(得分: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
     }
 }

答案 2 :(得分: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,因此可能存在语法错误。请修理它们:)

答案 3 :(得分:0)

 String query="select id from user limit 0,9";

 String query="select id from user limit"+  start + "," + end;

在这里,您已经硬编码了偏移量,限制。而是使用变量start,end,data_limit(根据示例为10)。 “开始”应该是开始索引。 “结束”应为(“开始” + data_limit)。