我使用android studio翻译编辑器翻译我的应用程序,在使用阿拉伯语作为语言在Android手机上运行我的应用程序时出现此错误:
android.database.sqlite.SQLiteException:没有这样的列:498(代码1):,同时编译:SELECT * FROM photos WHERE store_id = 498 ORDER BY photo_id ASC
app_id>中的方法java> com> db>查询是:
public ArrayList<Photo> getPhotosByStoreId(int storeId) {
ArrayList<Photo> list = new ArrayList<Photo>();
db = dbHelper.getReadableDatabase();
String sql = String.format("SELECT * FROM photos WHERE store_id = %d", storeId);
Cursor mCursor = db.rawQuery(sql, null);
mCursor.moveToFirst();
if (!mCursor.isAfterLast()) {
do {
Photo entry = formatPhoto(mCursor);
list.add(entry);
} while (mCursor.moveToNext());
}
mCursor.close();
dbHelper.close();
return list;
}
答案 0 :(得分:1)
使用rawQuery的完整方法参数集来正确转义值,以便在sql语句中使用。
...
ArrayList<Photo> list = new ArrayList<Photo>();
db = dbHelper.getReadableDatabase();
Cursor mCursor = db.rawQuery("SELECT * FROM photos WHERE store_id = ?",
new String[] { storeId });
mCursor.moveToFirst();
...
答案 1 :(得分:1)
问题是您正在使用String.format(String, Object ...)
,它使用默认语言环境进行格式化。阿拉伯语使用不同的数字,导致您的查询包含与SQLite数据库中找不到的字符。
要解决此问题,您可以避免使用String.format()
,只需执行:
String sql = "SELECT * FROM photos WHERE store_id = " + storeId;
或者,如果由于某种原因仍然需要string.format(),您可以这样做:
Locale locale = Locale.Builder().setLanguage("en").setRegion("US").build();
String sql = String.format(locale, "SELECT * FROM photos WHERE store_id = %d", storeId);