查询仅返回表中的数字或数字+字母组合。如何修改它以显示带有字母的记录?

时间:2019-06-15 23:41:46

标签: java database android-sqlite

我只想接收来自KEY_EXAMPLE列的记录。当KEY_EXAMPLE列具有“ 1234”或“ 1234a”之类的记录时,代码将显示此类记录,但是当其具有诸如“ abcd”之类的记录时,则不会显示。

我试图看看为什么它不希望显示信件记录,我认为问题出在“选择”上,但是我不知道怎么写。

 public static final String _id = BaseColumns._ID;
 public static final String KEY_EXAMPLE = "Example";

 private static final String SCRIPT_CREATE_DATABASE =
        "create table " + MYDATABASE_TABLE + " ("
                + _id + " integer primary key autoincrement, "
                + KEY_X + " text, "
                + KEY_Y + " text,"
                + KEY_EXAMPLE + " text);";


 public Cursor showRecordsFromExample(){
    String[] selectedColumn = new String[]{_id, KEY_EXAMPLE};
    Cursor selectedCursor = sqLiteDatabase.query(MYDATABASE_TABLE, selectedColumn,
            "Example", null, null,
            null, null);
    return selectedCursor;
}

为什么只显示数字或数字+字母记录?如何使其也显示字母记录?

1 个答案:

答案 0 :(得分:2)

  

为什么只显示数字或数字+字母记录?

原因是WHERE子句(查询方法的第3个参数)很可能不是预期的表达式。

实际上是您在使用:-

SELECT _id,Example FROM mytable WHERE Example; 

因此,示例列被视为比较的结果,它为false或true(0或1)。

abcd (非数字形式)为0 false。

首先遇到数字时,例如 123 123ABC ,则SQlite会考虑该数值,如果该数值不为0,则为true。

  • 0ABC为假。
  • -9ABC是真的。
  • ABC999为假(首先为非数字)

错误的行(0)将被忽略,包括正确的行(非0),因此是结果。

  

如何使其也显示字母记录?

如果您使用过:-

public Cursor showRecordsFromExample(){
    String[] selectedColumn = new String[]{_id, KEY_EXAMPLE};
    Cursor selectedCursor = sqLiteDatabase.query(MYDATABASE_TABLE, selectedColumn,
            null, null, null,
            null, null);
    return selectedCursor;
}

然后您将获得所有行的值。

如果您要使用:-

public Cursor showRecordsFromExample(){
    String[] selectedColumn = new String[]{_id, KEY_EXAMPLE};
    Cursor selectedCursor = sqLiteDatabase.query(MYDATABASE_TABLE, selectedColumn,
            KEY_EXAMPLE + " LIKE '%a%'", null, null,
            null, null);
}

这将返回“示例”列中任何位置具有a或A的所有行。