数据库查询返回null,即使其中有值

时间:2013-06-24 08:33:25

标签: android android-sqlite

在我的Android应用程序中,我试图通过将一个参数传递给where子句来获取数据库中的值,但它始终返回null ...并且logcat中没有错误... 我似乎无法弄清楚这里有什么问题?

请帮忙!

我调用数据库函数的代码:

appmname=mDbHelper.getMname(appName);
             applname=mDbHelper.getLname(appmname);
             customername=appName+appmname+applname;
                // app_formno=mDbHelper.getAppno(settings.getString("ap_First_Name", ""));

             s=mDbHelper.fetchDetails(appName);
            s=mDbHelper.getMainData(customername);

这些是返回数据库值的函数:

public String getMname(String fname)
{
    String mname = null;
    try
    {
        String sql="select app_mname from lnt_data_table where app_fname = '"+fname+"'";
        Cursor c=mDb.rawQuery(sql, null);
        if (c != null) {
            c.moveToFirst();

            while (!c.isAfterLast()) {

                    mname=c.getString(0);
            }
            c.close();
        }

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return mname;
}

public String getLname(String mname)
{
    String lname = null;
    try
    {
        String sql="select app_lname from lnt_data_table where app_mname= '"+mname+"'";
        Cursor c=mDb.rawQuery(sql, null);
        if (c != null) {
            c.moveToLast();

            while (c.isBeforeFirst() != true) {

                    lname=c.getString(0);
            }
            c.close();
        }

    }
    catch(Exception e)
    {
        e.printStackTrace();
    }
    return lname;
}

如果我给这个祝酒词消息

Toast.makeText(ListViewDetails.this,appName+ appmname +applname, Toast.LENGTH_LONG).show();

当数据库中包含值时返回null!

2 个答案:

答案 0 :(得分:2)

尝试使用此格式调用光标并关闭它

    if (cursor != null) {

      if (cursor.moveToFirst()) {

          do {
                       //your code

              }

           while (cursor.moveToNext());

         }

  cursor.close();

希望有所帮助:)

答案 1 :(得分:1)

我认为你在实际从中得到任何东西之前都要移到cursor的末尾。尝试将c.moveToLast();更改为c.moveToFirst(),然后在while循环中将while (c.isBeforeFirst())更改为while(!c.isAfterLast())

您当前正在移动到光标的末尾,然后检查它是否位于第一个条目之前的位置......这是不可能的。可能是为什么你没有得到任何回报