这是我的第一个应用程序,我遇到了很多问题,试图通过现在将月份字段与月份进行比较,尝试使用此代码完成一个月的所有收入交易,但是我得到了上面的错误代码。不知道该怎么办。下面的代码。

 //Create Table Income
private static final String CREATE_TABLE_INCOME = "CREATE TABLE " + TABLE_INCOME
        + "(" + COL_ID + "INTEGER PRIMARY KEY," + COL_INCOME_SOURCE + "TEXT,"
        + COL_INCOME_AMOUNT + "NUMERIC," + COL_ACCOUNT_TYPE + "TEXT," + COL_DATE + "DATE," +
        COL_DESCRIPTION + "TEXT," + COL_MONTH + "NUMERIC)";

方法
public double income_month(double month_income) {
    Calendar cal = Calendar.getInstance();
    int month_now = cal.get(Calendar.MONTH + 1);
    SQLiteDatabase mDatabaseManager = this.getReadableDatabase();

    Cursor c = mDatabaseManager.rawQuery("SELECT SUM(income_amount) FROM " +
            TABLE_INCOME + " WHERE " + COL_MONTH  + " = '" + month_now+ "'", null);

    if (c!=null)
    c.moveToFirst();
    do {
        assert c != null;
        month_income = c.getDouble(0);
    }
    while (c.moveToNext());
    c.close();

    return month_income;
}

和主要 Activity 中的调用
 double month_income = 0;
        mDatabase = new DatabaseManager(this.getApplicationContext());
        month_income = mDatabase.income_month(month_income);
        final TextView incomeview = findViewById(R.id.income);
        incomeview.setText("" + month_income);

最佳答案

CREATE语句是错误的,因为列名及其数据类型之间没有空格。
更改为此:

private static final String CREATE_TABLE_INCOME = "CREATE TABLE " + TABLE_INCOME
        + "(" + COL_ID + " INTEGER PRIMARY KEY," + COL_INCOME_SOURCE + " TEXT,"
        + COL_INCOME_AMOUNT + " NUMERIC," + COL_ACCOUNT_TYPE + " TEXT," + COL_DATE + " DATE," + COL_DESCRIPTION + " TEXT," + COL_MONTH + " NUMERIC)";

您将必须从设备上卸载应用程序,以便删除数据库并重新运行以使用正确的列名和数据类型重新创建表。

还要在代码中的各处使用常量名称作为列名,以避免出错,因此,代替income_amount,请使用COL_INCOME_AMOUNT,并使用?占位符在rawQuery()中传递参数,而不是连接单引号:
Cursor c = mDatabaseManager.rawQuery("SELECT SUM(" + COL_INCOME_AMOUNT + ") FROM " + TABLE_INCOME + " WHERE " + COL_MONTH  + " = ?", new String[] {month_now});

10-07 19:35
查看更多