2013-01-18 87 views
2

我想建立一個應用程序,保存數據在sqlite database.i有一個類,搜索由VendorName和日期搜索數據庫。問題是我想要它顯示MeterNumbers保存在相同的日期。我已經嘗試過,它只給了我它在數據庫中得到的第一個結果,可以說我搜索了保存在01/01/2013的Tom,它應該顯示保存在01/01/2013的Tom的MetereNumbers。 2013在sqlite數據庫中搜索

這裏是我的表中的SQLite

爲例VENDORNAME日期MeterNumber

湯姆.... 2013年1月1日.... ..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 updateCustomerIntent = new Intent(Searching.this, Result.class); 
updateCustomerIntent.putExtra("product", dbUser.getMeterNUmber(ss)); 
startActivity(updateCustomerIntent); 
+1

你的參數數據是你的次數嗎?不應該是約會嗎? – ggenglish

回答

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。

+1

也許爲他添加一個代碼示例,以便他可以看到如何返回結果的List列表? – Doomsknight

+0

可以請你添加/編輯一個例子,以便我可以看到它,因爲我迷路了,我不知道從哪裏開始。 – CoT

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; 

} 

指定盼着你應該多元素循環你正在查詢名稱和日期,但你的示例代碼顯示,否則,希望這有助於一點。