2

私はsqliteデータベースにデータを保存するアプリケーションを構築しようとしています.VendorNameとDateで検索するデータベースを検索するクラスがあります。問題は、同じDateに保存されたMeterNumbersを表示することです。私が試したところ、データベースに取得した最初の結果しか得られませんでした。たとえば、2013 年 1 月 1 日に保存された Tom を検索すると、01/01/ に保存された Tom の両方の metereNumbers が表示されるはずです。 2013年

ここにsqliteの私のテーブルの例があります

ベンダー名 日付 メーター番号

...トム.... 2013/01/01 ......2098957438902

...トム... 2013/01/01........4786909876785

...スティーブン...18/01/2013........8978978906542

これはSqliteデータベースのコードです

public String getMeterNUmber(String MeterNumber) throws SQLException  
{
    String[] whereArgs = new String[]{MeterNumber}; 

Cursor mCursor = db.rawQuery("SELECT MeterNumber FROM " + SCAN_TABLE + " WHERE  Date = ?",whereArgs); 
mCursor.moveToFirst(); 


if(mCursor.getCount() > 0){ 
    MeterNumber = mCursor.getString(0); 
}

return MeterNumber;
} 

これは、sqlite データベースでクエリを呼び出し、意図的に別のクラスに結果を取得するクラスのコードです。

Intent updateCustomerIntent = new Intent(Searching.this, Result.class);
updateCustomerIntent.putExtra("product", dbUser.getMeterNUmber(ss));
 startActivity(updateCustomerIntent);
4

3 に答える 3

4

まず、パラメータは数値ではなく日付である必要があります。次に、最初のレコードをプルするだけで結果をループしません。androidでSQLiteを使用する際には、最初にいくつかの優れたチュートリアルを改訂する必要があると思います。役立つリンクがいくつかあります。

于 2013-01-18T18:08:42.283 に答える
1

1つの値を期待している場合は、次のようにする必要があります。

public String getMeterNUmber(String date) throws SQLException {  

    String meterNumber = null;

    Cursor cursor = db.rawQuery("SELECT MeterNumber FROM " + SCAN_TABLE + " WHERE  Date = ?", new String[]{date} );

    if ( cursor.moveToNext() )  meterNumber = cursor.getString(0);

    cursor.close();

    return meterNumber;

}

複数の要素を期待している場合は、他の人が述べているようにループする必要があります

public ArrayList<String> getMeterNUmber(String date) throws SQLException {    

    ArrayList<String> meterNumbers = new ArrayList<String>();

    Cursor cursor = db.rawQuery("SELECT MeterNumber FROM " + SCAN_TABLE + " WHERE  Date = ?", new String[]{date} );

    while ( cursor.moveToNext() )  meterNumbers.add( cursor.getString(0) );

    cursor.close();

    return meterNumbers;

}

名前と日付でクエリを実行することを指定しますが、サンプルコードはそれ以外のことを示していますが、これが少し役立つことを願っています。

于 2013-01-18T18:17:58.453 に答える
1

まず第一に、あなたの getMeterNumber メソッドはメーター番号を引数として取ります.ggenglishのコメントですでに指摘されているように、これは奇妙に思えます.日付でなければなりませんか? また、メソッドは mCursor.getString(0) を 1 回だけ呼び出し、それを返します。つまり、結果セットの最初の行からのみメーター番号を取得します。

すべての結果が必要な場合は、レコードセット全体を反復処理する必要があります。カーソルを受け取ると、最初の行の直前に配置されるため、メソッド moveToNext() を使用してループできます。次に、ArrayList などの適切なデータ構造体に結果を格納する必要もあります。

ArrayList<String> results = new ArrayList<String>();
while (mCursor.moveToNext()) {
    results.add(mCursor.getString(0));
}

だから、あなたはこのようなものになってしまうでしょう

public ArrayList<String> getMeterNUmber(String meterDate) throws SQLException  
{
    String[] whereArgs = new String[]{meterDate}; 

    Cursor mCursor = db.rawQuery("SELECT MeterNumber FROM " + SCAN_TABLE + " WHERE  Date = ?",whereArgs); 

    ArrayList<String> results = new ArrayList<String>();
    while (mCursor.moveToNext()) {
        results.add(mCursor.getString(0));
    }

    mCursor.close();

    return results;
} 

最後に、データをインテントに追加するときに、putExtra の代わりに putStringArrayListExtra を使用します。

于 2013-01-18T17:58:07.493 に答える