2017-10-10 33 views
0

我一直在試圖從一個名爲的工作站的數據庫中檢索一些數據,然後將它存儲到數據庫列表視圖中。當我打電話給這個活動的應用程序停止。如何使用rawQuery()將數據存儲到字符串數組中?

繼承人的代碼:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_list_view); 
    SQLiteDatabase db = openOrCreateDatabase("Station.db", SQLiteDatabase.CREATE_IF_NECESSARY, null); 
    Cursor data_fetch = db.rawQuery("Select * From Station", null); 
    String[] station_array = new String[data_fetch.getCount()]; 
    int i = 0; 
    while(data_fetch.moveToNext()){ 
     String uname = data_fetch.getString(data_fetch.getColumnIndex("Station_name")); 
     station_array[i] = uname; 
     i++; 
    } 
    ArrayAdapter station_adapter = new ArrayAdapter<String>(this,R.layout.activity_list_view,station_array); 
    ListView station_listView = (ListView) findViewById(R.id.station_list); 
    station_listView.setAdapter(station_adapter); 
} 

應用程序的工作原理,當我註釋掉

Cursor data_fetch = db.rawQuery("Select * From Station", null); 

這使我相信,這條線是一個導致應用程序崩潰,但我無法找到任何問題。

請注意,我已經在之前的活動中創建並將數據插入數據庫站。 任何提示將不勝感激。謝謝你提前。 PS:我是一個新手,所以請讓我知道,如果有什麼其他的重要性,我省略了!

+0

如果您已經在以前的活動創造並插入數據到數據庫站,那麼你爲什麼再次打開或創建它?爲數據庫打開或創建以及其他所有內容創建分離類。你只需要創建該類的對象。請參閱此鏈接:: https://www.androidhive.info/2011/11/android-sqlite-database-tutorial/ – zephyr

+0

我認爲變量數據庫是你如何與數據庫交互我的不好。 –

+0

並且還更改您的代碼以獲取所有數據:Cursor data_fetch = db.rawQuery(「Select * From Station」,null); (data_fetch.moveToFirst()){0} {0} {0} (data_fetch.moveToNext()); //「email」==表中的列名稱 } while(data_fetch.moveToNext()); } – zephyr

回答

0

你必須創建數據庫的Helper類這樣

public static class CitrusDatabaseHelper extends SQLiteOpenHelper { 
     CitrusDatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
     } 

     @Override 
     public void onCreate(SQLiteDatabase _db) { 
      _db.execSQL(TABLE_NAME_CREATE_SQL); 

      // database = this.getReadableDatabase(); 
     } 

     @Override 
     public void onUpgrade(SQLiteDatabase _db, int oldVersion, int newVersion) { 
      Log.w(TAG, "Upgrading application's database from version " + oldVersion 
        + " to " + newVersion + ", which will destroy all old data!"); 

      // Destroy old database: 
      _db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME); 

      // Recreate new database: 
      onCreate(_db); 
     } 
    } 

這裏TABLE_NAME_CREATE_SQL意味着這樣

這是樣品

private static final String TABLE_NAME_CREATE_SQL = 
      "create table " + TABLE_NAME 
        + " (" + KEY_ROWID + " integer primary key autoincrement, " 
        + KEY_NAME + " text," 
        + KEY_EMAILID + " text," 
        + KEY_MOBILE_NUMBER + " text," 
        + KEY_PASSWORD + " text," 
        + KEY_USERID + " integer," 
        + KEY_IMAGE_PATH + " text," 
        + KEY_Notification + " integer," 
        + KEY_DOB + " text);"; 

,那麼你必須訪問DB類像這樣

​​3210個

過程光標是這樣

int i=0; 
if (data_fetch.moveToFirst()) { 
     do { 
      String uname = data_fetch.getString(data_fetch.getColumnIndex("Station_name")); 
      station_array[i] = uname; 
      i++; 
     } while (data_fetch.moveToNext()); 
    } 

希望,它會幫助你

+0

爲什麼你註釋掉database = this.getReadableDatabase(); ? –

+0

@Arun Mani,因爲當你想對數據庫執行一些讀取操作時,你需要使用this.getReadableDatabase()。不在創建表格時。 – zephyr

相關問題