2016-12-13 10 views
-3

おそらく、特定の行のIDを最終的に返すSQLStatementを呼び出すとします。 nullのオブジェクト参照の上android.database.sqlite.SQLiteDatabase.rawQuery(java.lang.String, java.lang.String[]) :上記のコードnullオブジェクト参照のSQLiteDatabase

public int FindInDatabase(String info){ 

     Cursor c = db.rawQuery("SELECT id FROM " + DatabaseName + " WHERE " + DataField + " = " + info,null); 
     if (c != null){ 
      c.moveToFirst(); 
     } 
     return c.getInt(1); 
    } 

は、カーソルのエラーを含む、正常に実行することができません。何が間違っていますか?ありがとう。

+2

あなたが適切 'db'を初期化していますか? – Rohit5k2

+0

クエリを呼び出す前に開いているデータベースを初期化してコード内で実行したことがありますか? –

答えて

0

は、この、あなたがSqliteOpenHelperを拡張したクラスで

を試してみてください。それを使用する前にdbオブジェクトを初期化してください。

public int FindInDatabase(String info){ 
    SQLiteDatabase db = this.getReadableDatabase(); 

     Cursor c = db.rawQuery("SELECT id FROM " + DatabaseName + " WHERE " + DataField + " = " + info,null); 
     if (c != null){ 
      c.moveToFirst(); 
     } 
     return c.getInt(1); 
    } 
+0

こんにちは、返信ありがとうございます。私はメソッド 'getReadbleDatabse()'を解決できないというエラーが発生しました。これを修正する方法は?tq – JackPowell

+0

@JackPowell大丈夫です。どのクラスでこのメソッドFindInDatabase()があります。それは活動ですか?またはSqliteOpenHelperを拡張したクラス? – Raghavendra

+0

このメソッド "FindInDatabase()"は、アクティビティクラスで実装されました。アクティビティクラスはSqliteOpenHelperで拡張されていません。 tq – JackPowell

0

カーソルを使用する前にDBを初期化する必要があります。

SQLiteDatabase db = this.getReadableDatabase(); 
//cursor usage for db 

だからあなたのコードは次のようにする必要があります:

public int FindInDatabase(String info){ 
     SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor c = db.rawQuery("SELECT id FROM " + DatabaseName + " WHERE " + DataField + " = " + info,null); 
     if (c != null){ 
      c.moveToFirst(); 
     } 
     return c.getInt(1); 
    } 
関連する問題