0

アプリが実行されません - クエリを実行して特定の値を出力しようとしています

方法:

public Cursor trying(String vg){
    String q="SELECT quantity FROM " + TABLE_CONTACTS +  " WHERE name=" + vg;
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor  cursor = db.rawQuery(q,null);

            if (cursor != null) {
                cursor.moveToFirst();
            }
            return cursor;
    }

メインからメソッドを呼び出す

Cursor wow = db.trying("gold");
text = (TextView) findViewById(R.id.textView13);
text.setText((CharSequence) (wow));
4

1 に答える 1

2

初めに。try 変数をステートメントに直接追加しているため、変数を一重引用符で囲むか、列として解釈する必要があります。

"SELECT quantity FROM " + TABLE_CONTACTS +  " WHERE name= '" + vg + "'";

そして2番目の「大きな」問題は、ここを見てください:

text.setText((CharSequence) (wow));

ここでキャストしようとしていますがCursorCharSequenceそれは不可能です。データを取得する場合は、 getString()メソッドCursorの Cursor クラスの getters メソッドから 1 つを使用する必要があります。

String quantity = wow.getString(0); // it returns your quantity from Cursor
text.setText(quantity);

これで動作するはずです。

おすすめ:

クエリで実際にプレースホルダーを使用するパラメーター化されたステートメントを使用することをお勧めします。データベースにデータを追加したり、データベースからデータを取得したりするためのより安全な方法を提供します。

コードを書き直してみましょう。

String q = "SELECT quantity FROM " + TABLE_CONTACTS + " WHERE name = ?";
SQLiteDatabase db = this.getReadableDatabase();
Cursor  cursor = db.rawQuery(q, new String[] {vg});

それは簡単に機能します。プレースホルダー?は文字列値に置き換えられます。

于 2013-04-05T20:19:00.173 に答える