在sqlite数据库中搜索

时间:2013-01-18 17:47:49

标签: android sqlite android-intent

我正在尝试构建一个在sqlite database.i中保存数据的应用程序。它有一个在搜索VendorName和Date的数据库中搜索的类。问题是我希望它显示保存在同一日期上的 MeterNumbers 。我试过它只给了我在数据库中得到的第一个结果,让我说我搜索保存在2013年1月1日的汤姆,它应该显示保存在01/01 /的Tom的metereNumbers 2013

这是我在sqlite中的表的一个例子

  

VendorName 日期 MeterNumber

     

......汤姆...... 01/01/2013 ...... 2098957438902

     

...汤姆... 01/01/2013 ........ 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将结果带到另一个类

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

3 个答案:

答案 0 :(得分:4)

首先,你的参数应该是日期而不是数字,其次你不要循环结果你只需要拉第一条记录。我认为你应该首先修改一些好的教程,首先使用SQLite和android.Here是一些很好的链接,可能有所帮助。

答案 1 :(得分: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;
} 

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

答案 2 :(得分: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;

}

您指定您按名称和日期查询,但您的示例代码显示不同,希望这会有所帮助。