我想将记录插入到sqllite数据库中,但是在插入之前,我必须检查记录是否存在。
我使用了这段代码,但是尽管记录存在,但仍然没有说出这样的列并停止工作。
SQLiteDatabase db = this.getReadableDatabase();
String selectQuery = "SELECT * FROM " + TABLE_TEAM + " WHERE "
+ TEAM_TABLE_NAME + " = " + name+";";
Log.e(LOG, selectQuery);
Cursor c = db.rawQuery(selectQuery, null);
if (c != null) {
return true;
}
return false;
答案 0 :(得分:0)
这是使用rawQuery()
的推荐方式:
String selectQuery = "SELECT * FROM " + TABLE_TEAM + " WHERE " + TEAM_TABLE_NAME + " = ?";
Cursor c = db.rawQuery(selectQuery, new String[] {name});
因此您将name
作为参数传递给查询,并避免了sql injection的风险。
在您的代码中,您仅检查Cursor
对象是否为null
,而不检查它是否包含正确的行。
因此,像这样返回getCount() > 0
的结果:
return c.getCount() > 0;
如果该名称已存在于表中,它将返回true
。
至于no such column
错误,则有所不同。
首先,请确保TEAM_TABLE_NAME
是该列的正确名称,如果正确,则可能是您对列名称所做的更改未反映到数据库中。
因此,请从设备上卸载应用程序,以便删除数据库,然后重新运行以使用列的新名称重新创建数据库。
答案 1 :(得分:0)
字符串必须放入'' 因此,替换
String selectQuery = "SELECT * FROM " + TABLE_TEAM + " WHERE "
+ TEAM_TABLE_NAME + " = " + name+";"
使用
replace String selectQuery = "SELECT * FROM " + TABLE_TEAM + " WHERE "
+ TEAM_TABLE_NAME + " = \'" + name+"\';"