2

我正在尝试构建一个将数据保存在 sqlite 数据库中的应用程序。我有一个在数据库中搜索的类,它按供应商名称和日期搜索。问题是我希望它显示保存在同一日期的MeterNumbers。对于我所尝试的,它只给了我它在数据库中获得的第一个结果,假设我搜索保存于 2013 年 1 月 1 日的 Tom,它应该显示保存于 01/01/ 的 Tom 的两个metereNumbers 2013

这是我在 sqlite 中的表的示例

供应商名称日期 MeterNumber

...汤姆.... 2013 年 1 月 1 日 ......2098957438902

...汤姆... 2013 年 1 月 1 日 ..........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

首先,您的参数应该是日期而不是数字,其次,您不要循环遍历您刚刚提取的第一条记录的结果。我认为您应该首先在将 SQLite 与 android 结合使用时修改一些好的教程。这里有一些好的链接可能会有所帮助。

于 2013-01-18T18:08:42.283 回答
1

首先,您的 getMeterNumber 方法将米数作为参数,正如 ggenglish 的评论中已经指出的那样,这似乎很奇怪,它应该是一个日期不是吗?此外,您的方法只调用 mCursor.getString(0) 一次,然后返回,这意味着您只能从结果集的第一行获取仪表编号。

如果您想要所有结果,则需要遍历整个记录集。当您收到光标时,它将位于第一行之前,因此,您可以使用 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;
} 

最后,在将数据添加到意图时使用 putStringArrayListExtra 而不是 putExtra。

于 2013-01-18T17:58:07.493 回答
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 回答