2

データベースの結果を照会して返すメソッドを作成しました。このメソッドがカーソル行に到達すると、プログラム全体がクラッシュします。

これはクラッシュする行です:

カーソル項目 = rDb.query(DATABASE_TABLE, columns, "_id like '1'", null, null, null, null);

列は文字列で、_id という列があります。構文に問題はありません。助けてください!

データベース クラスの変数:

private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "data";
private static final String DATABASE_TABLE = "restaurants";

//Database Columns
public static final String COLUMN_ROWID = "_id";
public static final String COLUMN_NAME = "name";
public static final String COLUMN_TELEPHONE = "phone_number";
public static final String COLUMN_EMAIL ="email";
public static final String COLUMN_MENUURL = "menu_address";
public static final String COLUMN_WEBSITE = "website_address";
public static final String COLUMN_MOBILE = "mobile number";

//Database Table Create Statement
private static final String DATABASE_TABLECREATE = "create table "
        + DATABASE_TABLE + " (" + COLUMN_ROWID
        + " integer not null, " 
        + COLUMN_NAME + " text not null, " 
        + COLUMN_TELEPHONE + " integer not null, "
        + COLUMN_EMAIL + " text not null, "
        + COLUMN_MENUURL + " text not null, "
        + COLUMN_WEBSITE + " text not null, "
        + COLUMN_MOBILE + " integer not null) ;";

//the database itself
private SQLiteDatabase rDb;

列:

String[] columns = new String[]{COLUMN_ROWID, COLUMN_NAME, COLUMN_TELEPHONE, COLUMN_EMAIL,     COLUMN_MENUURL, COLUMN_WEBSITE, COLUMN_MOBILE};

11-05 16:15:05.633: D/gralloc_goldfish(882): GPU エミュレーションなしのエミュレーターが検出されました。11-05 16:15:07.533: D/Button(882): クリック 11-05 16:15:07.553: D/string 宣言 (882): クエリの直前 11-05 16:15:07.553: D/AndroidRuntime( 882): VM のシャットダウン 11-05 16:15:07.553: W/dalvikvm(882): threadid=1: キャッチされない例外で終了するスレッド (group=0x41465700) 11-05 16:15:07.564: E/AndroidRuntime(882 ): 致命的な例外: メイン 11-05 16:15:07.564: E/AndroidRuntime(882): java.lang.NullPointerException 11-05 16:15:07.564: E/AndroidRuntime(882): com.example.testforthingy で。 RestaurantDatabase.getData(RestaurantDatabase.java:107) 11-05 16:15:07.564: E/AndroidRuntime(882): com.example.testforthingy.RestaurantDisplay$1.onClick(RestaurantDisplay.java:26) 11-05 16:15 :07.564: E/AndroidRuntime(882): android.view.View.performClick(View.java:4240) 11-05 16:15:

public String getData(){
    String rName= "";
    String[] columns = new String[]{COLUMN_ROWID, COLUMN_NAME, COLUMN_TELEPHONE, COLUMN_EMAIL, COLUMN_MENUURL, COLUMN_WEBSITE, COLUMN_MOBILE};

    Cursor item = rDb.query(DATABASE_TABLE, columns, "name like 'Terry'", null, null, null, null);

    for(item.moveToFirst();item.moveToNext(); item.isAfterLast()) {
        rName = item.getString(item.getColumnIndex(COLUMN_NAME));
    }

    return rName;
4

1 に答える 1

0

_id は文字列ではなく整数です。また、列は String ではなく String[] 型である必要があります。そうしないと、コードがコンパイルされません。だから私はあなたが試してみることをお勧めします:

Cursor item = rDb.query(DATABASE_TABLE, columns, "_id=1", null, null, null, null);
于 2013-11-05T21:34:34.233 に答える