2017-10-10 54 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

相关问题