我试着写在z DBOpenHelper的方法扩展SQLOpenHelper类。 它应该评估数据库中是否存在具有相同名称的条目。
public boolean existsContact(Contact contact) {
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(1);
String cname = contact.getName();
if (name == cname) {
cursor.close();
db.close();
return true;
}
} while (cursor.moveToNext());
}
db.close();
return false;
}
这里的Contact类的相关部分:
public class Contact {
String _name;
public String getName(){
return this._name;
}
}
现在,这里的奇怪的事情:
场景A:if (name == cname)
其中name = "foo"
和cname = "foo"
等于false。 Eclipse调试器显示名称的foo和cname的foo具有不同的id。这两个变量如代码中所示填充。
方案B:if(name == cname)
其中variabales加载这样的:
String name = "foo";
String cname = "foo";
statement equals true as it's supposed to.
方案C:if("foo" == "foo")
等于true ...但是...调试器就走出了窗外。 LogCat显示调试器已连接,但eclipse的Debug透视图中没有任何活动。断点不起作用。没有显示线程。
更好使用name.equals(cname);不要使用==来进行字符串比较。 – Smit
你可以改变代码来检查名称是否存在使用sql,并避免循环数据例如:'SELECT * FROM“+ TABLE_CONTACTS +'Where name ='+ contact.getName()' –
哦,好的...谢谢! –