我正在尝试编写一个获取查询的程序,该查询将显示类(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/