【发布时间】:2012-12-06 08:34:43
【问题描述】:
我正在尝试在 az DBOpenHelper extends 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) 变量的加载方式如下:
String name = "foo";
String cname = "foo";
statement equals true as it's supposed to.
场景 C:if("foo" == "foo") 等于 true...但是...调试器退出窗口。 LogCat 显示调试器已连接,但 Eclipse 的调试透视图中没有任何活动。断点没有影响。没有显示线程。
【问题讨论】:
-
最好使用 name.equals(cname);永远不要使用 == 进行字符串比较。
-
您可以更改代码以使用 sql 检查名称是否存在并避免循环数据 例如:
SELECT * FROM " + TABLE_CONTACTS + ' Where name = ' + contact.getName()
标签: java android eclipse string if-statement