我查询一个表,让它按Province排序                Cursor cursor = db.query(DatabaseHelper.tableName_B3_1,
                 new String[]{"ID","Province","name"}
                           ,null, null, null, null,"Province",null);
显示出的结果确实是Province名相同的会连续在一起,
但不是按拼音排序的,出现的先后顺序是“上海”、“云南”、“内蒙古”、“北京”、“吉林”……
我没搞明白这是按什么规律的排序,我记得Order by应该是按拼音的。请问怎样做能按拼音来排序。

解决方案 »

  1.   

    Order by 应该是按拼音排的呀?
      

  2.   

    帮你找到个
    Java中获取GBK编码汉字的拼音字头方法。(完整代码) 
      

  3.   

    我个人有一个办法,但是比较繁烦,但是也特别好用。首先使用 pinyin4j-2.5.0.jar这个包将文字转换成拼音,或者转换成拼音的首字母,然后对转换后的字母进行排序(对字母排序就是将字母转换成ASICC码表)。这样便可对中文汉字进行排序。
    汉字转换成拼音代码如下:(首先要导入上面那个包)
    package com.puyo.common;import net.sourceforge.pinyin4j.PinyinHelper;
    import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
    import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
    import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
    import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType;
    import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;/**
     * 提供汉字->拼音的转换
     * @author kech
     *
     */
    public class PinYin4J {

    /**
     * 将文字转换成拼音
     * @param hanzhis
     * @return
     */
    public static String toPinYin(String hanzhis) {
    CharSequence s = hanzhis;
    char[] hanzhi = new char[s.length()];
    for (int i = 0; i < s.length(); i++) {
    hanzhi[i] = s.charAt(i);
    } char[] t1 = hanzhi;
    String[] t2 = new String[s.length()];
    /** */
    /**
     * 设置输出格式
     */
    net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat t3 = new HanyuPinyinOutputFormat();
    t3.setCaseType(HanyuPinyinCaseType.UPPERCASE);
    t3.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
    t3.setVCharType(HanyuPinyinVCharType.WITH_V); int t0 = t1.length;
    String py = "";
    try {
    for (int i = 0; i < t0; i++) {
    t2 = PinyinHelper.toHanyuPinyinStringArray(t1[i], t3);
    if(t2!=null)
    if(t2.length>0)
    py = py + t2[0].toString();
    }
    } catch (BadHanyuPinyinOutputFormatCombination e1) {
    e1.printStackTrace();
    } return py.trim();
    } /**
     * 提取每个汉字的首字母
     * 
     * @param str
     * @return String
     */
    public static String getPinYinHeadChar(String str) {
    String convert = "";
    for (int j = 0; j < str.length(); j++) {
    char word = str.charAt(j);
    // 提取汉字的首字母
    String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(word);
    if (pinyinArray != null) {
    convert += pinyinArray[0].charAt(0);
    } else {
    convert += word;
    }
    }
    return convert;
    }

    public static String converterToFirstSpell(String chines) {
            String pinyinName = "";
            char[] nameChar = chines.toCharArray();
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            for (int i = 0; i < nameChar.length; i++) {
                if (nameChar[i] > 128) {
                    try {
                        pinyinName += PinyinHelper.toHanyuPinyinStringArray(
                                nameChar[i], defaultFormat)[0].charAt(0);
                    } catch (BadHanyuPinyinOutputFormatCombination e) {
                        e.printStackTrace();
                    }
                } else {
                    pinyinName += nameChar[i];
                }
            }
            return pinyinName;
        }    
        public static String converterToSpell(String chines) {
            String pinyinName = "";
            char[] nameChar = chines.toCharArray();
            HanyuPinyinOutputFormat defaultFormat = new HanyuPinyinOutputFormat();
            defaultFormat.setCaseType(HanyuPinyinCaseType.LOWERCASE);
            defaultFormat.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
            for (int i = 0; i < nameChar.length; i++) {
                if (nameChar[i] > 128) {
                    try {
                        pinyinName += PinyinHelper.toHanyuPinyinStringArray(
                                nameChar[i], defaultFormat)[0];
                    } catch (BadHanyuPinyinOutputFormatCombination e) {
                        e.printStackTrace();
                    }
                } else {
                    pinyinName += nameChar[i];
                }
            }
            return pinyinName;
        }}