1

Android アプリケーション (produtos、lista、item) に 3 つのテーブルを持つデータベースがあります。しかし、クエリを作成しようとすると、「そのようなテーブル項目はありません」という例外が発生します。

私の DatabaseHelper のコード:

@Override
    public void onCreate(SQLiteDatabase db)
    {

        db.execSQL("CREATE TABLE lista(" +
                    "id INT AUTO_INCREMENT, " +
                    "nome VARCHAR(50), " +
                    "data VARCHAR(10), " +
                    "total REAL, " +
                    "primary key(id));");

        db.execSQL("CREATE TABLE items( " +
                    "id INT AUTO_INCREMENT, " +
                    "lista INT, " +
                    "produto INT, " +
                    "valor REAL, " +
                    "primary key(id));");

        db.execSQL("CREATE TABLE produtos(" +
                "id INT AUTO_INCREMENT, " +
                "descricao VARCHAR(100), " +                
                "primary key(id));");
    } 

コードのこの部分で例外が発生します。

String sql = "SELECT i.id, i.valor, i.lista, p.descricao " +
                       "FROM items i " +
                       "INNER JOIN produtos p " +
                       "ON (i.produto = p.id) " +
                       "WHERE (items.lista = ?)";

        try
        {
            Cursor cursor = banco.rawQuery(sql, new String[]{String.valueOf(lista)}); //the exception
            cursor.moveToFirst();
            while(!cursor.isAfterLast())
            {
                Item i = new Item();
                i.setId(cursor.getInt(0));
                i.setValor(cursor.getDouble(1));
                i.setLista(cursor.getInt(2));
                i.setDescricao(cursor.getString(3));
                l.add(i);
                cursor.moveToNext();
            }
            cursor.close();
        }
        catch(SQLiteException e)
        {
            Toast.makeText(contexto, e.getMessage(), 100000).show();
        }

他の2つのテーブルを作成しましたが、クエリ中に問題はありません。エラーはクエリ文字列にあると思いますが、理由はわかりません。

奇妙なことに、どうやらこのテーブルに挿入できるようです。

4

1 に答える 1

0

「WHERE (i.lista = ?)」を使ってみてください

「アイテム」にエイリアスを割り当てました。

于 2013-01-13T16:41:56.550 に答える