我正在尝试构建一个在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);
答案 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;
}
您指定您按名称和日期查询,但您的示例代码显示不同,希望这会有所帮助。