java - income_amount (code 1) : , 编译时:SELECT SUM(income_amount) FROM INCOME WHERE month = '24'

标签 java android sqlite compiler-errors android-sqlite

这是我的第一个应用程序,我遇到了很多问题我正在尝试通过比较月份字段与月份来使用此代码总计一个月的所有收入交易,但我得到了上述错误代码。不知道该怎么做。代码如下。

 //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});

关于java - income_amount (code 1) : , 编译时:SELECT SUM(income_amount) FROM INCOME WHERE month = '24',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62358233/

相关文章:

java - Wildfly 8.0.2 内的反射库

java - 我正在尝试将 Gecko 或 WebKit 嵌入到 Java Swing 应用程序中

Android.os.Build 数据示例,请

android - 如何收听 DialogFragment 关闭事件

mysql - Django:按天分组和计数

mysql - 如何将数据从一个 SQLite 移动到具有不同设计的 MySQL?

c# - 在 Xamarin.Android 中执行大量 SQlite 查询失败

使用反射调用 PumpEvents 时出现 java.lang.illegalArgumentException

java - 计算android中的时差

java - 同时使用 Button 和 Tab?