将sqldata提取到数组中

时间:2011-03-03 23:13:44

标签: android

我在sqlite中有一些数据,并希望将数据提取到一个字符串数组中,我成功获得第一列但无法获取下一列数据。这是我的代码。

SQLiteDatabase db =  contactsdbHelper.getWritableDatabase();
    //db.openDatabase(path, factory, flags)
     int columnIndex = 1; // Whichever column your float is in
   Cursor cursor1= getData();
   String[] values=new String[cursor.getCount()+1];
   try{
   if(cursor1.moveToFirst())
   {
       for(int i=0;i<cursor1.getCount();i++ )
       {
           values[i]=cursor1.getString(columnIndex);
           //Log.i("HI", "piyush");
           Log.i("StartTime"+i, values[i]);

           cursor1.moveToNext();
       }
   }
   }
   catch(ArrayIndexOutOfBoundsException e){
       Log.i("Exception Generated", e.toString());

   }
   String[] values1=new String[cursor.getCount()+1];
   try{
   if(cursor1.moveToNext())
   {
       for(int i=0;i<cursor1.getCount();i++ )
       {
           values1[i]=cursor1.getString(columnIndex+1);

           Log.i("EndTime"+i, values[i]);

           cursor1.moveToNext();
       }
   }
   }
   catch(ArrayIndexOutOfBoundsException e){
       Log.i("Exception Generated", e.toString());

   }

5 个答案:

答案 0 :(得分:1)

在开始阅读第二列之前,您需要再次在Cursor上调用moveToFirst()。

具体而言,第二个if应为:

if (cursor1.moveToFirst())

编辑 - 通常数据存在于数据库中,原因是:您不希望在大多数情况下将其全部读取到一个大数组的内存中。

您是否可以寻找CursorAdapterListView组合来显示列表中的数据?

答案 1 :(得分:1)

为什么不一次填充两个数组?

SQLiteDatabase db =  contactsdbHelper.getWritableDatabase();
//db.openDatabase(path, factory, flags)
 int columnIndex = 1; // Whichever column your float is in
Cursor cursor1= getData();
String[] values=new String[cursor.getCount()+1];
String[] values1=new String[cursor.getCount()+1];
try{
if(cursor1.moveToFirst())
{
   for(int i=0;i<cursor1.getCount();i++ )
   {
       values[i]=cursor1.getString(columnIndex);
       values1[i]=cursor1.getString(columnIndex+1);
       Log.i("StartTime"+i, values[i]);

       cursor1.moveToNext();
   }
}
}
catch(ArrayIndexOutOfBoundsException e){
   Log.i("Exception Generated", e.toString());

}

但是整个事情看起来有点垃圾......你想要实现什么目标?

答案 2 :(得分:0)

尝试按列名读取列值。

Cursor cursor = ...
if(cursor.moveToFirst()) {
    do {
         values[i] = cursor.getString(cursor.getColumnIndex("columnName"));
         values1[i] = cursor.getString(cursor.getColumnIndex("otherColumnName"));
    } while(cursor.moveToNext());
}

其中“columnName”和“otherColumnName”是要填充到数组中的表的列的名称。

答案 3 :(得分:0)

Cursor cur = db.query(TABLENAME, null, null, null, null, null, null);
        cur.moveToFirst();
        int a[] = new int[100];

for (int i = 0; i < cur.getCount(); i++) { a[i] = cur.getInt(0); cur.moveToNext(); }

答案 4 :(得分:0)

这是我的代码,用于返回列表中表格中的所有数据。但是,它不起作用。 我已经从CheckData类调用了这个方法,而后者又由主类通过intent调用。

public List<String[]> selectAll()
{
    List<String[]> list = new ArrayList<String[]>();
    Cursor cursor = db
      .query(TABLE_NAME, null, null, null, null, null, null);
    int x = 0;
    if (cursor.moveToFirst())
    {
        do
        {
            String[] b1 = new String[]
            {
                cursor.getString(1),
                cursor.getString(2)
            };
            list.add(b1);
            x = x + 1;
        }
        while (cursor.moveToNext());
    }

    if (cursor != null && !cursor.isClosed())
    {
        cursor.close();
    }
    cursor.close();
    return list;
}

我的数据库包含3列 - id(整数主键),symbol(文本)和company_name(文本)。我的数据库名称为AppDB,表名为scrip