1

これが私のテーブルのセットアップです:

public static final String TABLE_DEBT = "debt";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_DEBT_NAME = "debt_name";
public static final String COLUMN_DEBT_TOTAL = "debt_total";
public static final String COLUMN_APR = "apr";
public static final String COLUMN_PAYMENT = "payment";
public static final String COLUMN_SPECIAL_RATE = "s_rate";
public static final String COLUMN_SPECIAL_TIME = "s_time";
public static final String COLUMN_FIRST_FEE = "first_apr_fee";
public static final String COLUMN_PAY_DATE = "pay_date";
private static final String DATABASE_NAME = "debt.db";
private static final int DATABASE_VERSION = 1;


private static final String DATABASE_CREATE = "create table " + TABLE_DEBT + "( " + COLUMN_ID + " integer primary key autoincrement, " + COLUMN_DEBT_NAME + " text not null, " + COLUMN_DEBT_TOTAL
            + " text not null, " + COLUMN_APR + " text not null, " + COLUMN_PAYMENT + " text not null, " + COLUMN_SPECIAL_RATE + " text, " + COLUMN_SPECIAL_TIME + " text, " + COLUMN_FIRST_FEE + " text, " + COLUMN_PAY_DATE + " text)";

この条件付き形式でこれらのクエリを使用して、ユーザーの選択によって並べ替えています。

    if (DebtPlanner.PlanType.equals("highint")) {
         c = database.rawQuery("SELECT *  FROM debt ORDER BY apr DESC;", null);
         Log.d("TAG", "DebtPlanner.PlanType is " + DebtPlanner.PlanType);
    } else if (DebtPlanner.PlanType.equals("lowbal")) {
         c = database.rawQuery("SELECT *  FROM debt ORDER BY debt_total ASC;", null);
         Log.d("TAG", "DebtPlanner.PlanType is " + DebtPlanner.PlanType);
    } else if (DebtPlanner.PlanType.equals("highbal")) {
         c = database.rawQuery("SELECT *  FROM debt ORDER BY debt_total DESC;", null);
         Log.d("TAG", "DebtPlanner.PlanType is " + DebtPlanner.PlanType);
    }

追加されたコード:

for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
            indName[j++] = c.getString(c.getColumnIndex("debt_name"));
            indBal[k++] = c.getDouble(c.getColumnIndex("debt_total"));
            indPay[l++] = c.getDouble(c.getColumnIndex("payment"));
            indApr[m++] = c.getDouble(c.getColumnIndex("apr"));
            indSRate[e++] = c.getString(c.getColumnIndex("s_rate"));
            indSTime[f++] = c.getInt(c.getColumnIndex("s_time"));
            indDay[d++] = c.getString(c.getColumnIndex("pay_date"));

            rowCounter[n++] = n;
        }


    for (int i : rowCounter) { 

       nameList.add(indName[r++]); // This is the name of each debt that shows out of order.
       // lots of edited calucaltion here

     }

ただし、それらはソートされますが、期待される値ではソートされません。たとえば、(ASC または DESC のいずれかで) 並べ替えると言うと、debt_toal( debt_nameASC または DESC の部分が正しくなります) で並べ替えられます。

電話で実際のテーブルを見たところ、すべてのデータが正しい列にあります。ここからどこへ行くべきかさえわかりませんか?

追加コード:

public class DebtPlanner extends Application {

    public static String PlanType = "highint";


    public static String highIntPlan() {
        return DebtPlanner.PlanType = "highint";
    }

    public static String lowBalPlan() {
        return DebtPlanner.PlanType = "lowbal";
    }

    public static String highBalPlan() {
        return DebtPlanner.PlanType = "highbal";
    }

}

4

2 に答える 2

1

Java で String を比較するときは、 ではなくを使用する必要があります。equals()==

if (DebtPlanner.PlanType.equals("default")) {

これについては、Java で文字列を比較するにはどうすればよいですか? にすばらしい説明があります。


またelse if、相互に排他的な考えであるため、後続のクエリでも使用する必要があります。


ずっと正しくソートされています。問題は、列が文字列であることです。したがって、技術的には、2 は 1000000 より大きいです。これを修正する方法を理解する必要があります...

OK、CASTテキストではなく整数として列をソートするために使用します。

SELECT * FROM debt ORDER BY CAST(apr AS INTEGER) DESC;
于 2012-12-02T18:24:50.170 に答える
1

使用する

Log.d("TAG", "DebtPlanner.PlanType is " + DebtPlanner.PlanType);

if複数のに正しいデータがあることを確認する

于 2012-12-02T18:26:54.013 に答える