我无法使用游标从数据库中获取数据

时间:2013-11-16 08:26:53

标签: android sqlite cursor android-cursor

我为获取数据制作了以下功能。

public List<Presentation> getSlideMaster() {

        List<Presentation> pptList = new ArrayList<Presentation>();
        String selectQuery = "SELECT * FROM "
                + Constants.SLIDE_MASTER.slideMaster_Table + " WHERE dm_Id=" + lastDeckID;

        SQLiteDatabase db = dbhelper.getWritableDatabase();
        Cursor cursor = db.rawQuery(selectQuery, null);

        if (cursor.moveToFirst()) {
            do {
                Presentation presentation = new Presentation();
                presentation.setSlideId(cursor.getString(0));
                getSlideID = presentation.getSlideId();
                Log.i("string slide id in database helper", "" + presentation.getSlideId());

                pptList.add(presentation);
            } while (cursor.moveToNext());
        }

        String selectQuery2 = "SELECT sl_Id FROM "
                + Constants.SLIDE_LAYOUT.slideLayout_Table + " WHERE sm_Id = "
                + getSlideID;
        Cursor cursorSL = db.rawQuery(selectQuery2, null);
        Log.i("query", ""+selectQuery2);
        if(cursorSL.moveToFirst()){
            Log.i("getslideLayout function", "");
            do{

                Log.i("query string 0 ", ""+cursorSL.getString(0));
                Presentation presentation = new Presentation();
                presentation.setSlideLayoutId(cursorSL.getString(0));
                getSlideLayoutId  = presentation.getSlideLayoutId();

                Log.i("string slide layout id in slideMaster", "" + getSlideLayoutId);
            }while(cursorSL.moveToNext());
        }
        else{
            Log.i("No Data Found!!!!!", "");
        }
        cursor.close();
        cursorSL.close();
        db.close();
        return pptList;

    }

我从slideMaster_Table获取数据非常简单,但是我无法从另一个查询中获取数据,这在if(cursorSL.moveToFirst())条件中的Logcat中没有打印任何值 This is SlideLayout_table

当我在其他活动中使用代码时,我可以非常轻松地获得sl_Id。

2 个答案:

答案 0 :(得分:0)

可能会在解决方案之下解决您的问题

使用Cursor cursorSL = db.rawQuery(selectQuery2, new String[]{getSlideID});

代表

selectQuery2="SELECT sl_Id FROM "+Constants.SLIDE_LAYOUT.slideLayout_Table + " WHERE sm_Id = ?";

答案 1 :(得分:0)

我的猜测是你在构建第二个查询时遇到了麻烦。基本上,像你一样构建数据库查询绝不是一个好主意。 android数据库API为此提供了更准确的界面。将您的第二部分程序重写为:

String [] selectArgs = {getSlideID};
String selectQuery2 = "sm_Id = ?";
Cursor cursorSL = db.query(Constants.SLIDE_LAYOUT.slideLayout_Table, null,
                           selectQuery2, selectArgs, null, null, null, null);

请注意,query的第四个参数用于替换where参数,它是String[]并且所有数组成员在?的位置按顺序替换?在查询字符串中。

我认为您可能在构建查询时遇到问题。


PS:您也在滥用日志标记:

Log.i("No Data Found!!!!!", "");

实际应该是Log.i("TAG", "No Data Found!!!!!");

第一个参数是日志标记,应该用于对相关日志消息进行分组,在这种情况下,您可以在自己的组中打印每条消息,这没有多大意义。

我知道这个说明并不会解决你当前的问题,但是我指出了这一点,所以你将来会知道它(我也会看到我的同事从这样的错误做法中学习)。< / p>