【问题标题】:I can't get data from database using cursor我无法使用游标从数据库中获取数据
【发布时间】:2022-03-17 22:33:53
【问题描述】:

我已经做了以下获取数据的功能。

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 中打印任何值

当我在另一个活动中使用代码时,我可以很容易地获得 sl_Id。

【问题讨论】:

  • 检查你的cursorSL是否为空,使用Cursor类的getCount()方法。
  • 使用Cursor cursorSL = db.rawQuery(selectQuery2, new String[]{getSlideID}); for selectQuery2="SELECT sl_Id FROM "+Constants.SLIDE_LAYOUT.slideLayout_Table + " WHERE sm_Id = ?";
  • @MM-BB,谢谢,但这对我不起作用。
  • 向我们展示表格的内容和getSlideID的返回值。
  • 我添加了数据库的图像。getSlideID 的返回值是最后一列 sm_Id,我想要 sl_Id。

标签: android sqlite android-cursor


【解决方案1】:

下面的解决方案可以解决您的问题

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

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

【讨论】:

  • 谢谢,但这对我不起作用。在 if 条件下不打印任何内容。
  • 这不起作用..这个小问题有什么解决方案吗?
【解决方案2】:

我的猜测是您在构建第二个查询时遇到了麻烦。基本上,像您这样构建数据库查询绝不是一个好主意。 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!!!!!");

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

我知道这篇笔记不会解决你眼前的问题,但我指出它,以便你将来知道它(我也看到我的同事从这样的错误做法中学习)。

【讨论】:

  • 感谢它。现在,我使用了它,但没有任何东西可以打印或进入 if 条件。从数据库获取数据的其他功能工作正常,但仅在此表中我无法得到任何错误或结果。
  • 这不起作用..这个小问题有什么解决方案吗?
  • @immodi 好的,抱歉暂时离开了。我会尽力提供帮助。第二个条件实际上会发生什么?你看到No Data Found!!!!! 打印出来了吗?还是您看到getslideLayout function 然后string slide layout id in slideMaster 没有任何价值?
  • No..没有打印任何内容。我已经描述了在 IF 条件下没有任何内容可以打印或发生...
  • @immodi 那么它应该是一个异常发生你可以尝试在try\catch 中包围该方法并在日志中打印异常吗?之后请分享堆栈跟踪
猜你喜欢
  • 2021-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-08
  • 1970-01-01
相关资源
最近更新 更多