如何获取数据库的整列并将其转换为String数组?

时间:2012-01-26 21:16:34

标签: android arrays string sqlite cursor

我正在尝试从我的数据库中的表中获取整个列,并将所有条目存储到String数组中。下面是我的代码:

    public Cursor fetchAllBarcodeEntries(){
    return db.query(BARCODE_TABLE, new String[] {KEY_BARCODE_ID, KEY_BARCODE_NUMBER, KEY_BARCODE_PRODUCT, KEY_BARCODE_PRODUCT_DESC}, null, null, null, null, null);
}

我正在调用并使用这样的函数:

    Cursor c = dbAdapter.fetchAllBarcodeEntries();

    for(int i = 0; i < c.getCount(); i++){
        stringArray[i] = c.getString(c.getColumnIndex(dbAdapter.KEY_BARCODE_PRODUCT);
    }

这是我正在获取的错误日志的一部分

01-26 23:15:02.434: E/AndroidRuntime(787): Caused by: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 1

任何帮助都会非常感激......

3 个答案:

答案 0 :(得分:2)

答案是here

ArrayList<String> columnArray1 = new ArrayList<String>();
ArrayList<String> columnArray2 = new ArrayList<String>();
ArrayList<String> columnArray3 = new ArrayList<String>();
if(mCursor.moveToFirst()!=null){
  do{ 
    columnArray1.add(mCursor.getString(COLUM_INDEX1));
    columnArray2.add(mCursor.getString(COLUM_INDEX2));
    columnArray3.add(mCursor.getString(COLUM_INDEX3));
  } while (mCursor.moveToNext()!=null);
}

之后,您可以将ArrayList转换为String数组:

String[] colStrArr1 = (String[]) columnArray1.toArray(new String[columnArray1.size()]);

答案 1 :(得分:1)

您应该检查c.getColumnIndex()的返回值。它可能返回-1,因为该表中不存在给定列(dbAdapter.KEY_BARCODE_PRODUCT),可能是由于数据库出错。

此外,Toast.LENGTH_SHORT在那里做什么? 您发布的代码似乎缺少某些内容......

答案 2 :(得分:1)

您可以尝试以下内容:

Cursor c = dbAdapter.fetchAllBarcodeEntries();

int columnCnt = c.getColumnCount ();

String[] stringArray = new String[columnCnt];
c.moveTofirst();



    for(int i = 0; i < columnCnt ; i++){

        stringArray[i] = c.getString(i);
}

注意:我没有IDE方便,可能存在语法错误。