没有这样的专栏:498(代码1):

时间:2016-01-18 13:29:29

标签: java android sql android-studio arabic

我使用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;
}

2 个答案:

答案 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);