Android,SQLlite误解了"价值"成为一个列(字段)

时间:2016-09-14 07:45:52

标签: android sqlite

希望有人在Android上使用SQLlite的更多知识能够为此提供有用的评论"测验",先谢谢:

创建一个简单的表

String CREATE_DIRBLE_COUNTRIES_TABLE = "CREATE TABLE " + DIRBLE_COUNTRIES_TABLE
    + "("
    + COLUMN_DUMMY + " TEXT,"
    + COLUMN_NAME + " TEXT PRIMARY KEY,"
    + COLUMN_TITLE + " TEXT,"
    + COLUMN_DESCRIPTION + " TEXT,"
    + COLUMN_SLUG + " TEXT,"
    + COLUMN_ANCESTRY + " TEXT,"
    + COLUMN_COUNTRYCODE + " TEXT,"
    + COLUMN_REGION + " TEXT,"
    + COLUMN_SUBREGION + " TEXT"
    + ")";

db.execSQL (CREATE_DIRBLE_COUNTRIES_TABLE);

然后检查此表是否有重复项,因此:

String Query = "Select * from " + table + " where " + column + "=" + value;
Cursor cursor = db.rawQuery(Query, null);

这会导致异常:

  

引起:android.database.sqlite.SQLiteException:没有这样的列:白俄罗斯(代码1):,同时编译:从名称=白俄罗斯的国家/地区选择*

是什么导致SQLlite将列名中的值白俄罗斯语解释为列?

在几乎相同的"流派"表格中,COLUMN_ID用作主键,此代码完美无缺。这就是为什么我用假人替换COLUMN_ID,以防它与_ID列发生冲突,而_ID列应该是自动创建的。

2 个答案:

答案 0 :(得分:5)

SQL中的字符串文字进入'single quotes',不会被解释为列名等标识符。

但是,使用?变量并绑定值更好:

String Query = "Select * from " + table + " where " + column + "=?";
Cursor cursor = db.rawQuery(Query, new String[] { value });

答案 1 :(得分:1)

更改您的代码行

"Select * from " + table + " where " + column + "=" + value;

"Select * from " + table + " where " + column + "= '" + value+"'";

值应该是单引号。