我正在编写一个基本的Android应用程序,其中填写个人信息,如姓名,电子邮件等,并通过按“提交”按钮存储在SQLite数据库中(这一切都完美无缺)。然后有一个搜索按钮,当填写一个字段时,该搜索按钮应该在数据库中搜索相应的人(例如,只有字段名称被赋予字符串“harry”而其他字段保持空值)。这是我的DatabaseHelper类中的相应代码:
public Person getPerson(String naam, String adres, String email, String geslacht,
String leeftijd, String geboortedatum){
Log.i("Main activity","Person to find: "+naam);
SQLiteDatabase db= this.getReadableDatabase();
Cursor curs=db.rawQuery("SELECT name FROM personen WHERE (name = ?) OR (adress = ?) "
+ "OR (email = ?) OR (gender = ?) OR (age = ?) OR (birthday = ?)",
new String[]{naam, adres, email, geslacht, leeftijd, geboortedatum});
Log.i("Main activity", "Query works");
我使用日志来确保抛出错误的位置,并发现当所有args []字段都被赋值时,rawQuery确实有效,但是当一个字段(例如email)包含空值时会出错。这不是我应该使用OR语句而不是AND语句的原因吗?如果没有,当应用程序中没有填写所有字段时,如何使其工作?
答案 0 :(得分:0)
快速修复应该是这样做的:
new String[]{naam == null? "''":naam, etc}
检查您的刺痛是否已初始化,如果不是,请将其替换为虚拟值。
答案 1 :(得分:0)
rawQuery()
需要一个字符串数组,但null
不是有效的字符串。
您必须将NULL直接放入SQL字符串中,而不使用参数。 但是,无论如何,当你动态地构建字符串时,你也可以省略这种比较。
答案 2 :(得分:-1)
按名称搜索:
// Getting single contact
Contact getContact(String name) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLE_CONTACTS, new String[] { KEY_ID,
KEY_NAME, KEY_PH_NUM }, KEY_NAME + "=?",
new String[] { name }, null, null, null, null);
//...
访问:
Contact contact = null;
if (cursor.moveToFirst()) {
contact = new Contact(Integer.parseInt(cursor.getString(0)),
cursor.getString(1), cursor.getString(2));
}
cursor.close();
// can return null if no contact was found.
return contact;