Sqlite查询在alpha查找时崩溃

时间:2017-10-30 21:10:25

标签: android sqlite

我遇到一个带有字符串部件号和字符串描述的简单SQLite数据库的问题,如果我尝试创建一个查询来查找传入的部件号,当我传入一个完全数字的部件号时它可以工作,但是如果传入的部件号包含崩溃的字母字符。

以下是相关的代码段;

public static final String TABLE_PARTS_HISTORY = "tbl_parts_history";
public static final String COLUMN_PART_NO = "partNoValue";
public static final String COLUMN_DESC = "descValue";
private static final String DATABASE_NAME = "mbHistory.db";
…
// Parts Database creation sql statement
private static final String PARTS_TABLE_CREATE = "create table "
        + TABLE_PARTS_HISTORY + "(" + COLUMN_ID
        + " integer primary key autoincrement, " + COLUMN_PART_NO
        + " text not null, " + COLUMN_DESC + " text not null);";
…
public void onCreate(SQLiteDatabase database) {
    // Log.i(DEBUG_TAG, "Starting onCreate " + DATABASE_CREATE);
    database.execSQL(PARTS_TABLE_CREATE);
}
…
public boolean partNoAlreadyExists(String partNoValue) {
    // Log.i(DEBUG_TAG, "Starting getQuery");
    open();
    Cursor cursor = database.query(SQLiteHelper.TABLE_PARTS_HISTORY,
            partNoSelectColumn, SQLiteHelper.COLUMN_PART_NO + " = "
                    + partNoValue, null, null, null, null);
    boolean exists = cursor.getCount() > 0;
    cursor.close();
    close();
    return exists;
}// End of partNoAlreadyExists

1 个答案:

答案 0 :(得分:0)

我似乎找到了一个答案,通过替换我列出的使用SQLite查询方法的游标方法和SQLite rawQuery方法,并在构建rawQuery选择字符串时在传入的partNo周围插入单引号。

Cursor cursor = database.rawQuery("SELECT * FROM "
    + SQLiteHelper.TABLE_PARTS_HISTORY
    + " WHERE " + SQLiteHelper.COLUMN_PART_NO + " = '" + partNo + "'", null);

最初传递数字部分时,它会自动将数字转换为选择字符串。但是当传递alpha partNo(没有单引号包装它)时,它会尝试将partNo视为alpha方法调用并失败。我很困惑,因为当它崩溃,并且记录的try / catch失败消息报告它无法执行该方法时,我认为它指的是我的方法(而不是它为partNo提取的“方法”。

非常感谢rawcode和M D让我指向正确的方向。