Android SQLite土耳其语

时间:2014-03-12 17:48:54

标签: android sqlite

我正在开发支持英语土耳其语语言的Android应用程序。 该应用包含 SQLite 数据库,其中包含表格和自动增量_id 列。

当此应用在英语设备上运行时,它可以正常工作,但在土耳其语设备上运行时,数据库会自动停止生成ID。

我尝试提取数据库文件并在SQLite数据库浏览器上打开它,它正确保存所有列值,只有 _id 列的值在土耳其语区域设置中仍为空

解决这个问题的想法?

修改

创建数据库:

public class DatabaseHandler extends SQLiteOpenHelper {
    private final static String TAG = "DatabaseHandler";

    private final static int DATABASE_VERSION = 3;
    private final static String DATABASE_NAME = "app_main_database";

    public DatabaseHandler(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String query = "CREATE TABLE tbl_item (_id INTEGER PRIMARY KEY NULL, _serverId TEXT NULL, _itemName TEXT NULL, _lastEditDate DATETIME NOT NULL)";

        db.execSQL(query);
    }

将行插入表:

    @Override
    public void insert() {
        ContentValues reVal = new ContentValues();

        reVal.put(COL_ITEM_SERVER_ID, getItemServerId());
        reVal.put(COL_ITEM_NAME, getItemName());
        reVal.put(COL_LAST_EDIT_DATE, getLastEditDate());

        SQLiteDatabase sqLite = new DatabaseHandler(this).getWritableDatabase();
        sqLite.insert(tableName, null, obj.getContentValues());
    }

1 个答案:

答案 0 :(得分:1)

您可以尝试打开数据库并将语言环境(使用setLocale)设置为英语。默认情况下,它将使用系统区域设置。

使用openDatabase您也可以设置NO_LOCALIZED_COLLATORS标记(这会禁用每个setLocale并可以修复您的问题(但现在从未对其进行过一些研究测试)。

public static final int NO_LOCALIZED_COLLATORS

Added in API level 1
Open flag: Flag for openDatabase(String, SQLiteDatabase.CursorFactory, int) to open the database without support for localized collators.

This causes the collator LOCALIZED not to be created. You must be consistent when using this flag to use the setting the database was created with. If this is set, setLocale(Locale) will do nothing.

Constant Value: 16 (0x00000010)

首次尝试时,我会在setLocale对象上测试datatabase