java - Android Sqlite 选择查询值是否为零或 0

标签 java android sqlite

我正在尝试编写一个获取查询的程序,该查询将显示类(class)表中的数据,如果值为:

course_id=0
or
semester_id=0
or
level_id=0
or
level_code=Select level
or
grade=Grade

因此,应显示具有上述任何值的任何行:

public List<Courses> getListCourseError() {
    Courses courses = null;
    List<Courses> coursesList = new ArrayList<>();
    openDatabase();
    Cursor cursor = mDatabase.rawQuery("SELECT * FROM COURSES WHERE semester_id=0 OR level_id=0 OR level_code=Select level OR grade=Grade", null);
    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        courses = new Courses(cursor.getInt(0), cursor.getInt(1), cursor.getString(2), cursor.getInt(3), cursor.getInt(4), cursor.getString(5), cursor.getInt(6), cursor.getString(7), cursor.getInt(8), cursor.getInt(9));
        coursesList.add(courses);
        cursor.moveToNext();
    }
    cursor.close();
    closeDatabase();
    return coursesList;
}

谢谢

最佳答案

我认为您的问题是字符串值必须用引号引起来。您也不包括 course_id 为 0。

因此,而不是“从学期_id=0或level_id=0或level_code=选择级别或等级=成绩的类(class)中选择*”

使用:-

"SELECT * FROM COURSES WHERE course_id=0 OR semester_id=0 OR level_id=0 OR level_code='Select level' OR grade='Grade'"

但是上面是 SQL 注入(inject)的候选者,所以实际上您应该使用选择参数(第二个参数),它将代表您正确包含字符串。所以更正确的解决方案是利用:-

String[] selectionargs = new String[]{"0","0","0","Select level", "Grade"};
Cursor cursor = mDatabase.rawQuery("SELECT * FROM COURSES WHERE course_id=? semester_id=? OR level_id=? OR level_code=? OR grade=?", selectionargs);

但是,建议仅在需要时使用 rawQuery 方法,并使用方便的 query 方法。这将是:-

String whereclause = "course_id=? OR semester_id=? OR level_id=? OR level_code=? or grade=?";
String[] whereargs = new String[]{"0","0","0","Select level", "Grade"};
Cursor cursor = mDatabase.query(
    "COURSES",
    null, //<<<< all columns (else String[] of columns)
    whereclause, //<<<< WHERE clause without the WHERE keyword
    whereargs, //<<<< arguments to replace ?'s 
    null, //<<<< GROUP BY clause
    null, //<<<< HAVING clause
    null //<<<< ORDER BY clause   
);

注释 - null 导致相应参数被忽略/默认(表名不能为 null)。例如columns(第二个参数)为 null 默认为所有列,即 *

  • 有许多不同的查询方法签名。请参阅SQLiteDatabase

  • 上面的代码是原则性代码,尚未经过测试,因此可能存在一些错误。

关于java - Android Sqlite 选择查询值是否为零或 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49701243/

相关文章:

java - 具有嵌套元素的 JAXB

java - 你如何通过 2 个 Activity 传递一个字符串?

android - 当 SqLite 中特定值的计数大于 1 时更新表

python - Django 一个字段中的多个文件

Java流类型问题

java - 强制更新 JTable 不起作用

java - 使用 Java 从 UNIX 时间戳转换为 "Today at: currentTime"

android - getpeername 无法识别已建立的连接

android - 如何在没有任何签名的情况下使用已处理的应用程序运行 Wear 应用程序?我的意思是开发者 Debug模式

java - 直接在 SQLite 数据库中使用 getter 和 setter