mysql与sql server分类分页查询语句

mysql:

分页:

String sql="select * from book limit ?,?"; //适用mysql,但注意,第一个?,代表开始的行数,第二个?是取多少条记录

分类且分页

String sql="select * from book "+ where +"limit ?,?";    //where 是参数,可用如where category_id=1;代替

sql server

分页(根据传递参数)

String sql="SELECT * FROM(SELECT ROW_NUMBER() OVER (ORDER BY id ASC) AS 'RowNumber', * FROM book) AS UserInfo WHERE RowNumber BETWEEN ( ( ( startindex - 1 ) * pagesize ) + 1 ) AND ( startindex * pagesize)";

sql查询的是从第几条到第几条。

分类且分页

"SELECT * FROM(SELECT ROW_NUMBER() OVER (ORDER BY id ASC) AS 'RowNumber', * FROM (select * from book "+where+ ") as book_sub) AS UserInfo where RowNumber BETWEEN( ? +1) AND ( ? +? )";

//where 是参数,可用如where category_id=1;代替

用sql server作查询时真有这么麻烦吗?是否有更简单的办法呢?

还有javaEE 开发中采用dbutils操作sql server数据库时,老会提示sql语句有语法错误,不知道为什么,就只能采用传统的jdbc操作。不知道为什么?

下面是具体实现代码:

private List<Book> bookquery(int startindex,int pagesize,String where,Object param){
try {
Connection conn=JdbcUtils.getConnection();
QueryRunner runner=new QueryRunner();
PreparedStatement st=null;
ResultSet rs;
if(where==null||where.trim().equals("")){
//String sql="select * from book limit ?,?"; //适用mysql,但注意,第一个?,代表开始的行数,第二个?是取多少条记录
//String sql="select * from book where id between ? and ?"; //适用sql server,但id要是int型
//String sql="SELECT * FROM(SELECT ROW_NUMBER() OVER (ORDER BY id ASC) AS 'RowNumber', * FROM book) AS UserInfo WHERE RowNumber BETWEEN ( ( ( startindex - 1 ) * pagesize ) + 1 ) AND ( startindex * pagesize)";

String sql="SELECT * FROM(SELECT ROW_NUMBER() OVER (ORDER BY id ASC) AS 'RowNumber', * FROM book) AS UserInfo WHERE RowNumber BETWEEN ( ? +1) AND ( ? +? )";

st=conn.prepareStatement(sql);
st.setInt(1, startindex);
st.setInt(2, startindex);
st.setInt(3, pagesize);
rs=st.executeQuery();
List list=new LinkedList();
while(rs.next()){
Book book=new Book();
book.setId(rs.getString("id"));
book.setName(rs.getString("name"));
book.setAuthor(rs.getString("author"));
book.setPrice(rs.getDouble("price"));
book.setImage(rs.getString("image"));
book.setDescription(rs.getString("description"));
list.add(book);
//book.setCategory(rs.getString("category_id");
}
return list;
                        //没法用dbutils,老提示语法错误,不知道为什么
//Object params[]={startindex,startindex,pagesize};
//return (List<Book>) runner.query(conn, sql, params, new BeanListHandler(Book.class));

}else{
//String sql="select * from book "+ where +"limit ?,?";
String sql="SELECT * FROM(SELECT ROW_NUMBER() OVER (ORDER BY id ASC) AS 'RowNumber', * FROM (select * from book "+where+ ") as book_sub) AS UserInfo where RowNumber BETWEEN( ? +1) AND ( ? +? )";
st=conn.prepareStatement(sql);
st.setObject(1, param);
st.setInt(2, startindex);
st.setInt(3, startindex);
st.setInt(4, pagesize);
rs=st.executeQuery();
List list=new LinkedList();
while(rs.next()){
Book book=new Book();
book.setId(rs.getString("id"));
book.setName(rs.getString("name"));
book.setAuthor(rs.getString("author"));
book.setPrice(rs.getDouble("price"));
book.setImage(rs.getString("image"));
book.setDescription(rs.getString("description"));
list.add(book);
//book.setCategory(rs.getString("category_id");
}
return list;
//没法用dbutils,老提示语法错误,不知道为什么
//Object params[]={param,startindex,pagesize};
//return (List<Book>) runner.query(conn, sql, params, new BeanListHandler(Book.class));

}
} catch (Exception e) {
throw new RuntimeException(e);
}
}



猜你喜欢

转载自blog.csdn.net/dhzbkj/article/details/80557358