2012-07-14 44 views
5

Tôi đang phát triển ứng dụng linh sam cho Android ngay bây giờ, tôi đang sử dụng nhiều bảng để lấy và chèn dữ liệu. trong quá trình phát triển và thấy mình tìm nạp dữ liệu từ bảng chỉ có hai cột STATS(_id, stat_name). Vấn đề của tôi là gì? Tôi có hoạt động với 10 nút và mỗi nút tương ứng với một nút stat_name. Khi người dùng nhấn một trong các ứng dụng nút là "đi" đến STATS bảng để có được chính xác _id và sau đó nhập số _id này vào một bảng khác GAME_STATS(_id, PlayerId (fk), GameId(fk), StatsId(fk)(andmore)) trên STATS._id = GAME_STATS.StatsId và tôi cơ bản phải thực hiện thao tác tương tự cho PlayerId.Tìm nạp giá trị duy nhất từ ​​SQLite trong android

Ngay bây giờ, tôi đang làm nó theo cách này:

public String getStatId(String statName){ 
    String statId = "Error"; 
    Cursor c = mDb.query(STAT_TABLE, new String[] {AbstractDbAdapter.STAT_ID, AbstractDbAdapter.STAT_NAME}, AbstractDbAdapter.STAT_NAME+ " = " +statName, null, null, null, null); 
    int count = c.getCount(); 
    if(count == 1){ 
     c.moveToFirst(); 
     statId = c.getString(c.getColumnIndex(AbstractDbAdapter.STAT_ID)); 
    } 
    c.close(); 
    mDb.close(); 
    Log.d("FootballApp","StatId =" +statId); 
    return statId;  
} 

vấn đề của tôi là gì, mà tôi biết rằng có NÊN chỉ có một giá trị trả về, và tôi vẫn phải sử dụng con trỏ, làm như vậy . Ngoài ra, theo ý kiến ​​của tôi, nó trông có vẻ phức tạp và mất thời gian để viết tất cả mã đó chỉ để lấy một id từ một bảng. Tôi có 9 bảng trong ứng dụng của tôi, và tôi sẽ phải viết phương pháp tương tự mỗi khi tôi cần _id từ bảng khác nhau khi tôi có, ví dụ, chỉ có tên.

Ai đó có thể cho tôi biết nếu có cách nào dễ dàng hơn để làm tất cả những điều đó? Xin vui lòng :) cảm ơn! :)

Trả lời

7

Tôi nghĩ rằng nó không đơn giản hơn thế nhiều. Tuy nhiên bạn có thể thực hiện phương pháp chung chung hơn, do đó bạn có thể sử dụng lại mã:

public String getFromDb(String tableName, String select, String selectBy, String selectName){ 
    String selection = "Error"; 
    Cursor c = mDb.query(tableName, new String[] {select}, selectBy + "=" + selectName, null, null, null, null); 
    if(c.getCount() == 1){ 
     c.moveToFirst(); 
     selection = c.getString(c.getColumnIndex(select)); 
    } 
    c.close(); 
    mDb.close(); 
    Log.d("FootballApp", select + "=" + selection); 
    return id;  
} 

Ví dụ sử dụng:

int statID = getFromDb(STAT_TABLE, AbstractDbAdapter.STAT_ID, AbstractDbAdapter.STAT_NAME, statName); 
+0

Để mã an toàn hơn thay thế 'selectBy +" = "+ selectName, null' với ' selectBy + "=?", New String [] {selectName} ' – Afilu

7

Đó là về đơn giản như nó được, nhưng Cursor.moveToFirst() lợi nhuận false nếu con trỏ rỗng do đó, bạn có thể cắt cuộc gọi c.getCount() và chỉ cần nói if(c.moveToFirst()) thay thế. Điều đó sẽ giúp bạn tiết kiệm được một chút khi gõ :)

Các vấn đề liên quan