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