0

私は現在、資産フォルダーにある自分のデータベースから単一の行を取得しようとしています。SQLite Query Browser とデバッガーからの SELECT ステートメントを使用して、テーブルに行があるかどうかを確認すると、データベースに 1 つの行が作成されました。とにかく、私のコードからステートメントを呼び出すと、空のカーソルが表示されます。メソッドも追加しました

カーソル.moveToFirst()

呼び出しを避けた

myDataBase.close();

TextView に単一のエントリを追加しようとしている方法は次のとおりです。

private void getAdresses(Location location) { // TODO
    double lat = location.getLatitude();
    double lng = location.getLongitude();
    Geocoder geocoder = new Geocoder(this, Locale.GERMAN);

    try {
        List<Address> addresses = geocoder.getFromLocation(lat, lng, 1);
        if (addresses.size() != 0) {
            Address address = addresses.get(0);

            String addressString = address.getAddressLine(0).toString();
            System.out.println("(geocoder) " + addressString);
            textView.append(addressString + "\n");

            Cursor cursor = mDbHelper.getAllEntrys("tblBar", "Adresse",
                    addressString);

            if (cursor.moveToFirst()) {

                String cursorContent = cursor.getString(cursor
                        .getColumnIndexOrThrow("Name"));
                textView.append(cursorContent + "\n");

            } else {
                System.out.println("No bar at current location");
            }
        } else {
            System.out.println("(geocoder) no address!");
        }
    } catch (IOException e) {
        System.out.println(e.toString() + "(geocoder)");
    }
}

さらに、これはデータベースで実際のクエリを呼び出すための私の方法です:

public Cursor getAllEntrys(String table, String column, String search) {
    try {
        String sSelect = "SELECT * FROM " + table + " WHERE " + column
                + " = '" + search + "'";
        Cursor cursor = mDb.rawQuery(sSelect, null);

        if (cursor != null) {
            cursor.moveToFirst();
        }
        return cursor;
    } catch (SQLException mSQLException) {
        System.out.println("getData >>" + mSQLException.toString());
        throw mSQLException;
    }
}

誰かがこれで私を助けてくれることを願っています。よろしくお願いします!

4

5 に答える 5

2

はじめに、迅速な対応に感謝します。がんばり続ける!答えは非常に明白ですが、私はそれを自分で考え出しました。http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/のチュートリアルの問題は、値を手動で追加する場合を考慮していないことです。 (SQLite データベース ブラウザでの更新) 最初にプログラムを実行した後、データベースに追加します。それが私がしたことです...したがって、最後の実行以降に変更があったかどうかを確認する独自のメソッドを作成する必要があります。誰もがこれを必要とすることを願っています:)

于 2012-08-25T09:27:31.153 に答える
1

//これは私にとってはうまくいきます

final Cursor c = sampleDB.rawQuery("SELECT FirstName, LastName,RedId FROM " +
                SAMPLE_TABLE_NAME +
                " where RedId =  '"+a+"'", null);
        int count = c.getCount();

        if(count == 0){

            Toast.makeText(RetrieveData.this, "Not Found", Toast.LENGTH_SHORT).show();
        }
于 2012-11-04T09:16:04.023 に答える
0

データベースから単一の行を取得するには、これを試してください。

Database クラスでこのメソッドを宣言します。

 public Cursor selectSingleRecord(String tableName, String[] tableColumns,
        String whereClause, String whereArgs[], String groupBy,
        String having, String orderBy) {
    return myDataBase.query(tableName, tableColumns, whereClause, whereArgs,
            groupBy, having, orderBy);  

} 

そして、このメソッドを使用してカーソルを取得します。

私のテーブル構造が以下の場合。

_id | 名前 | 住所

以下の方法で書きます

    String tableColumns[] = {"_id"}; // Here mansion the column which you want to retrieve I think in your case "addressString".
    String whereClause = {"Name"}; // Here use where clause

    Cursor cursor = dbHelper.selectSingleRecord("Your_Table_Name", tableColumns, whereClase +"=?" , new String[] {String.valueOf("NameOfPerson")}, null, null, null);

     // NameOfperson is the name which I am going to enter through EditText.
      if (cursor.moveToFirst())
        {            
              String getId = cursor.getString[0];  // Here you can get the id of respective person (i.e. the name which I have entered )                          
         }
        cursor.close();  // Finally close the curser

これがあなたを助けることを願っています。

于 2012-08-24T13:27:08.693 に答える
0

これが問題かどうかはわかりませんが、. . .

String sSelect = "SELECT * FROM " + table + " WHERE " + column
                + " = '" + search + "'";

検索変数が null の場合、クエリは次のように変換されます。

SELECT * FROM tblBar WHERE アドレス = 'null'

代わりにこれを使用してみてください:

search = (search == null) ? " IS NULL " : " = '" + search +" '" ;

String sSelect = "SELECT * FROM " + table + " WHERE " + column + search;
于 2012-08-24T14:45:19.337 に答える
0

sSelect を次のように変更します。SQL では、= something よりも like 'something' を使用する方がよい場合があります。

文字列 sSelect = "SELECT * FROM " + テーブル + " WHERE " + 列 + " like '" + 検索 + "'";

于 2012-08-24T14:18:50.233 に答える