1
下面的两种排序方法,可以确保NULL值总在最后
ORDER BY ISNULL([date], '9990-12-31')
ORDER BY ISNULL([date], '1900-1-1') DESC
2
数据库排序即可,程序实现的话你搜下排序算法,这里不赘述了
看你声明的list是什么类型的 你用普通的list是无序的 建议使用
list<article> arr= new arrayList<article>
arr=XXXgetAll();
来接受数据库查询到的值
而SQL 我帮你写了 记得采纳 不要伤了我的心
select from article
order by sort , pubulishiTime
就这样 很简单
但是你的命名有带你不符合规范 你的数据库字段 sort 在java中算是关键字 建议修改
看例子
import javautilArrayList;
import javautilCollections;
import javautilComparator;
import javautilList;
import javautilScanner;
public class Test {
public static void main(String[] args) {
List<Record> list = new ArrayList<Record>();
Collectionssort(list, new Comparator<Record>(){
public int compare(Record o1, Record o2) {
if(o1getKey1() > o2getKey1()){
return 1;
}else if(o1getKey1() == o2getKey1()){
if(o1getKey2() > o2getKey2()){
return 1;
}else if(o1getKey2() == o2getKey2()){
//TODO: compare key3
return -1;
}else{
return 0;
}
}else{
return 0;
}
}
});
}
}
class Record{
private int key1, key2, key3;
public int getKey1() {
return key1;
}
public int getKey2() {
return key2;
}
public int getKey3() {
return key3;
}
}
如果按照数据库自己排序,会按照中文的拼音进行排序(A-Z)有实验过。如果要实现楼主这样的功能。我建议,增加两个字段,分别是等级(level,最好是约定一个与A级B级对应的数字,如A级填1)、班级号(classno,班级 填,1,2,3代表1班2班3班),两个字段就可以确定一个班级。然后SQL语句为 select 查询的内容 from 表名 order by level,classno (先按level,后按classno排序)
有两种办法:
1你可以通过数据库查询就排序。不管你用什么框架都可以了,只要知道怎么写sql语句就ok,不过这些sql语句都是动态查询的哦,也就是你在点了排序的时候才传排序参数进去,然后在sql后面补上一句order
by
传的参数就可以了,你用ibatis的话有个动态关键字的配置,叫dyinacil
not-null什么来着,具体自己在网上差下,你可以输入ibatis动态查询就搜到了。用hibernate的话,你得在程序中判断输入的参数为空不,不为空就将sql+order
by
参数。用jdbc的话也差不多了,判断下,将其拼到你的sql语句即可。
2第二中思想是你可以编写一个java比较器,查出来的数据按什么规则去比较就可以了,想按什么字段比较就定什么样的java比较器。
第一种方法,就是list中对象实现Comparable接口,代码如下:
public class Person implements Comparable<Person> {
private String name;
private Integer order;
/
@return the name
/
public String getName() {
return name;
}
/
@param name
the name to set
/
public void setName(String name) {
thisname = name;
}
/
@return the order
/
public Integer getOrder() {
return order;
}
/
@param order
the order to set
/
public void setOrder(Integer order) {
thisorder = order;
}
@Override
public int compareTo(Person arg0) {
return thisgetOrder()compareTo(arg0getOrder());
}
}
public static void main(String[] args) {
List<Person> listA = new ArrayList<Person>();
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
p1setName("name1");
p1setOrder(1);
p2setName("name2");
p2setOrder(2);
p3setName("name3");
p3setOrder(3);
listAadd(p2);
listAadd(p1);
listAadd(p3);
Collectionssort(listA);
for (Person p : listA) {
Systemoutprintln(pgetName());
}
}
第二种方法,就是在重载Collectionssort方法,代码如下:
public class Person {
private String name;
private Integer order;
/
@return the name
/
public String getName() {
return name;
}
/
@param name
the name to set
/
public void setName(String name) {
thisname = name;
}
/
@return the order
/
public Integer getOrder() {
return order;
}
/
@param order
the order to set
/
public void setOrder(Integer order) {
thisorder = order;
}
}
public static void main(String[] args) {
List<Person> listA = new ArrayList<Person>();
Person p1 = new Person();
Person p2 = new Person();
Person p3 = new Person();
p1setName("name1");
p1setOrder(1);
p2setName("name2");
p2setOrder(2);
p3setName("name3");
p3setOrder(3);
listAadd(p2);
listAadd(p1);
listAadd(p3);
Collectionssort(listA, new Comparator<Person>() {
public int compare(Person arg0, Person arg1) {
return arg0getOrder()compareTo(arg1getOrder());
}
});
for (Person p : listA) {
Systemoutprintln(pgetName());
}
}
两次执行的结果都是:
name1
name2
name3
以上就是关于用JAVA或用SQL语句排序全部的内容,包括:用JAVA或用SQL语句排序、java list<T> 根据两个字段排序、Collections.sort方法对数据库取出的list排序 按着5个key 进行排序,求解!~java等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)