2013-03-04 21 views
0

我已經使用GUI創建了一個包含1650條記錄的數據庫。Android的SQLite的rowcount總是零?

我想查詢這個數據庫,但它總是什麼都沒有返回。我試着寫一個簡單的getrowcount()方法來查看我是否有任何東西,但總是返回零。如果有人能幫助指出發生了什麼,我必須在這裏忽略一些明顯的東西。

在我的主要app.java

db = new DbHandler(this); 
    String sIcao1 = "ROW COUNT = " + String.valueOf(db.getRowCount()); 

在我dbhandler.java

package com.jammo.mywidget4; 

<snip - standard includes> 

public class DbHandler extends SQLiteOpenHelper { 

    private static SQLiteDatabase db; 
    private static final int DATABASE_VERSION = 1; 
    private static final String DATABASE_NAME = "airports"; 
    private static final String TABLE_AIRPORTS = "airports"; 

    public DbHandler(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 

     db = this.getWritableDatabase(); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db = this.getWritableDatabase(); 
    } 

    int getRowCount() { 

     int nCount = -1; 
     //SQLiteDatabase db = this.getReadableDatabase(); 
     Cursor cur = db.rawQuery("SELECT * FROM airports", null); 
     nCount = cur.getCount(); 
     if (cur != null) { 
      //cur.moveToFirst();      
      //nCount = cur.getInt(0); 
      //if (cur.getInt (0) == 0) {    

      //} 
     } 

     return nCount; 
    } 

} 

在GUI(SQLite的DB瀏覽器)我做一個簡單的

select * from airports 

.. 。我得到了全部行數。當我調試Java時,遊標不會返回任何內容。

此外,由GUI創建的數據庫位於myapp/assets/airports.db中。

任何想法?

+0

我建議使用[SQLiteAssetHelper(https://github.com/jgilfelt/android-sqlite-asset-helper)庫。它具有將數據庫從'/ assets'移動到'/ databases'的API,因此您不必「重新發明輪子」。 – Sam 2013-03-04 21:04:53

回答

0

我認爲你需要在DATABASE_NAME中包含.db

嘗試修改此:

private static final String DATABASE_NAME = "airports"; 

這樣:

private static final String DATABASE_NAME = "airports.db"; 

編輯:

其實我覺得即使有這樣的變化也不會爲你工作。 SQLiteOpenHelper期待你的數據庫文件在/data/data/your.package/databases/之內所以我想你需要將它從資產複製到那裏,如果你想讓它與一個未經修改的SQLiteOpenHelper一起工作。

看到這裏學習如何過來複制:Android: Accessing assets folder sqlite database file with .sqlite extension

+0

我明白了,所以只要DB /資產/是不夠的。我必須每次將數據庫(oncreate)複製到新的/ data/data /(即每次運行應用程序時)?會給這個鏡頭,讓你知道 - 謝謝。 – Jammo 2013-03-04 19:14:31

+0

「所以只是在DB /資產/不足」 - 正確。 「每次運行應用程序時」 - 不,在正常情況下,您只需要在第一次運行應用程序時複製一次。之後,除非您更改資產中的數據庫文件,而是希望在應用程序中反映出來,否則無需再次複製它。 – FoamyGuy 2013-03-04 19:16:28

+0

Alrighty,我已經嘗試了您發佈的鏈接中描述的兩種方法(答案)。兩者都導致應用程序崩潰,但第二種方法是說「沒有這樣的表機場」; db =/data/data/com.mypackage.myapp/databases/airports.db ---我可以在這裏發佈我的新代碼作爲「答案」給你嗎? – Jammo 2013-03-04 20:20:24