0

データベースにレコードがあるにもかかわらず、データベースが null を返す

     private static final String DATABASE_NAME="PlayGamesdb";
     private static final String DATABASE_TABLE="peopleTable";

   public int fetchPlacesCount() {
        int count = 0;
        //String[] columns = new String[] {KEY_ROWID, KEY_NAME, KEY_HITS };
        Cursor c = ourDatabase.rawQuery("SELECT COUNT(*) from DATABASE_TABLE", null);
        c.moveToFirst();
        count = c.getInt(0);    
        return count;
    }

何が間違っているかについてのアイデアはありますか?

01-24 19:30:23.050: E/AndroidRuntime(1761): FATAL EXCEPTION: main
01-24 19:30:23.050: E/AndroidRuntime(1761): java.lang.NullPointerException
01-24 19:30:23.050: E/AndroidRuntime(1761):     at com.example.dbsample.PlayGame.fetchPlacesCount(PlayGame.java:93)
01-24 19:30:23.050: E/AndroidRuntime(1761):     at com.example.dbsample.SQLiteExample.onClick(SQLiteExample.java:123)
01-24 19:30:23.050: E/AndroidRuntime(1761):     at android.view.View.performClick(View.java:3511)

これは、他のクラスで fetchPlacesCount メソッドを呼び出すために使用される onclick です。

 case R.id.bSQLnumberofrows:
        int x = 0;
        PlayGame ec = new PlayGame(this);
        ec.open();
        x = ec.fetchPlacesCount();
        ec.close();
        sqlRow.setText(x);
        break;

編集:

問題を修正した後、以下のコードが機能するようになり、トースト メッセージとして正しい行数が表示されるようになりました。そのため、1 つの問題が修正され、さらに 1 つの問題が修正されました。この textView の何が問題なのかを確認するために、次に取り組むのはこれです。

Toast メッセージを使用することは、メソッドが正しい番号を返していることを確認する良い方法でした。

public int fetchPlacesCount() {
        int count = 0;
        Cursor q = ourDatabase.rawQuery("SELECT COUNT(*) from " + DATABASE_TABLE, null);
        q.moveToFirst();
       count = q.getInt(0);
        return count;
    }

int 他のクラス

    case R.id.bSQLnumberofrows:
        PlayGame ec = new PlayGame(this);
        ec.open();
        int x = ec.fetchPlacesCount();
        ec.close();
      //  sqlRow.setText(x);
        Toast.makeText(SQLiteExample.this, "value of x " + x , Toast.LENGTH_SHORT).show();
        break;
4

2 に答える 2

0

c.getCount()は、必要なカウントを提供します。

于 2013-01-24T10:31:26.553 に答える
0

変数に値を割り当てていないので、cont代わりに変数を返す必要があると思います。countcount

int cont = c.getInt(0); 
    return cont;

編集:

以下のようにクエリを起動します。

カーソル c = ourDatabase.rawQuery("SELECT COUNT(*) from " + DATABASE_TABLE, null);

于 2013-01-24T10:34:32.957 に答える