我遇到一个带有字符串部件号和字符串描述的简单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
答案 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让我指向正确的方向。