我正在尝试创建一个简单的收藏夹应用程序,您可以在其中保留您的收藏页面(例如,来自网络)。
假设我的数据库中有以下数据
Title | URL | TAG |
-------------------------------
Hey Ho.com Site
Jo Jo.com Image
Jo Mo.com Image
现在我想确保用户不会将同一页面添加两次,因此我将检查该值是否已存在。但我需要用户不要将站点添加到已添加的表中。
所以我想说我会尝试添加:
Title | URL | TAG |
-------------------------------
Jo Mo.com Image
这将返回true(用于“检查行是否存在”,因为已经存在相同的行)。
但如果我想尝试添加:
Title | URL | TAG |
-------------------------------
Jo Go.com Image
它会返回false(虽然标题已存在),因为没有相同的行。
这是我用数据将数据添加到数据库的代码:
public long createNote(String title, String url, String rn) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_TITLE, title);
initialValues.put(KEY_URL, url);
initialValues.put(KEY_RN, rn);
return mDb.insert(DATABASE_TABLE, null, initialValues);
如何检查数据库中是否已存在行?
答案 0 :(得分:7)
您可以使用光标检查:
public boolean checkEvent(String title, String URL, String tag)
{
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(TABLES,
new String[] { KEY_TITLE,KEY_URL,KEY_TAG },
KEY_TITLE + " = ? and "+ KEY_URL + " = ? and " + KEY_TAG + " = ?" ,
new String[] {title,url,tag},
null, null, null, null);
if(cursor.moveToFirst())
return true; //row exists
else
return false;
}
编辑:代码现在复制&准备就绪
答案 1 :(得分:5)
在数据库级别有一种非常优雅(imho)的方法。在创建数据库时将其添加到create table sql:
UNIQUE(TITLE, URL) ON CONFLICT REPLACE
然后你可以插入所有你想要的而不用检查,如果行已经存在,它将被添加或更新。
答案 2 :(得分:1)
您可以查询数据库中是否有唯一标识符,在您的情况下,标题可能是该行的唯一标识符。
public boolean isEntry(int title){
String queryString = "SELECT * FROM "+TABLE_NAME+" WHERE "+KEY_PROJECT_ID+" = "+"'"+project_id+"'";
Cursor c = db.rawQuery(queryString, null);
if(c.getCount() > 0){
Log.i("CHECK", "true");
return true;
}
else{
return false;
}
}
这里true
意味着有这样的行,false
意味着没有这样的条目。
现在让我们说即将在数据库中插入一个条目。即使该方法返回true
值,您可以执行的操作也可以比较示例中的其他两个值。
之后,您可以调用函数从数据库返回单行,如
public String getCursor(int project_id){
String queryString = "SELECT * FROM "+TABLE_NAME+" WHERE "+KEY_PROJECT_ID+" = "+"'"+project_id+"'";
Cursor cursor = db.rawQuery(queryString, null);
return cursor;
}
获得此功能后,您可以从中选择TAG
和URL
,看看它是否与数据库中的匹配。
像这样:
Cursor cursor = db.rawQuery(queryString, null);
String tag = "";
String url = "";
cursor.moveToFirst();
for (int i = 0; i < cursor.getCount(); i++) {
like_state = cursor.getString(cursor.getColumnIndex(KEY_TAG));
url = cursor.getString(cursor.getColumnIndex(KEY_URL));
cursor.moveToNext();
}
cursor.close();
if(!ins_tag.equalsIgnoreCase(tag) || !ins_url.equalsIgnoreCase(url)) {
//insert function here
}
正如评论中所提到的,你应该使用一个AUTOINCREAMENT整数作为主键。