【问题标题】:android.database.sqlite.SQLiteException: no such column :jomes(code 1):, while compiling: select sum(adPrice) from Checkouts Tableandroid.database.sqlite.SQLiteException:没有这样的列:jomes(代码 1):,编译时:从结帐表中选择 sum(adPrice)
【发布时间】:2017-08-10 13:25:01
【问题描述】:

我正在尝试在 android studio 上的 SQLITE 数据库中查询 sum 语句。但是我有一个例外,我什至在网上找不到任何答案。

这是我的例外:

“android.database.sqlite.SQLiteException:没有这样的列:jomes(代码 1):, 编译时:从 CheckoutsTable 中选择 sum(adPrice) 其中 用户名 = jomes;"

我创建了一个表 CheckoutsTable,我想检查我的用户名 jomes 并获取与该用户名相关的 adPrice(我的意思是总数)。 但它不起作用......

这是我的数据库助手;

   public int TotalCountStatement(String username)
    {
        SQLiteDatabase sqLiteDatabase = getReadableDatabase();
        //Cursor cursor = sqLiteDatabase.rawQuery("SELECT SUM(adPrice) FROM CheckoutsTable WHERE username = jomes;", null);
        int amount;

        Cursor cursor  = sqLiteDatabase.rawQuery("SELECT SUM(adPrice) FROM CheckoutsTable WHERE username = jomes;", null);
        if(cursor.moveToFirst()) {
            int total = cursor.getInt(cursor.getColumnIndex("username"));
            return total;
        }else{
        amount = 0;
        return amount;

        }
        //cursor.close();
    }

请帮助我找到任何答案,在此先感谢

【问题讨论】:

    标签: android database sqlite android-studio android-sqlite


    【解决方案1】:

    字符串比较应该在 SQL 中用引号引起来。您可以在此处使用单引号 ' '

    Cursor cursor  = sqLiteDatabase.rawQuery("SELECT SUM(adPrice) FROM CheckoutsTable WHERE username = 'jomes';", null);
    

    你也可以在下一行

    int total = cursor.getInt(cursor.getColumnIndex("username")); 
    

    这将导致异常,因为您正在尝试获取用户名列的索引,而在您的选择查询中您只完成了Select SUM

    所以改为这样做

    int total = cursor.getInt(0);
    

    【讨论】:

    • 它可以工作,但是,接下来它会在应用你的之后说.. IllegalState 异常:无法从 CurosorWindow 读取第 0 行,第 -1 行。确保在从光标访问数据之前正确初始化光标。 ——
    • 该错误是因为这一行 - int total = cursor.getInt(cursor.getColumnIndex("username"));
    • 在这一行中,您试图获取用户名列的索引,但该索引不存在,因为您选择的唯一内容是 SUM。
    • @JamunathHunga 只需执行 int total = cursor.getInt(0);
    • 谢谢,我会试试的
    【解决方案2】:

    您应该在 jomes 周围添加单引号或双引号,因为列用户名的类型是文本(我假设)。就像这个“乔姆斯”。

    Cursor cursor  = sqLiteDatabase.rawQuery("SELECT SUM(adPrice) FROM CheckoutsTable WHERE username = \"jomes\";", null);
    
    Cursor cursor  = sqLiteDatabase.rawQuery("SELECT SUM(adPrice) FROM CheckoutsTable WHERE username = 'jomes';", null);
    

    【讨论】:

    • 在 Android Studio 中给我一个红色文本如果我这样做,我认为 android studio 无法识别为字符串,因为它在双引号内。
    • 您必须使用 \ 对其进行转义。像这样:\"jomes\"
    • 或者你可以使用单引号:'jomes'。
    • 您现在是否遇到了不同的异常?
    • 但是,第二个有效,但是,接下来它会说.. IllegalState 异常:无法从 CurosorWindow 读取第 0 行,第 -1 行。确保在从光标访问数据之前正确初始化光标。
    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多