Android Sqlite代码(1)错误,没有此类列

Android Sqlite代码(1)错误,没有此类列,android,sqlite,Android,Sqlite,我的控制收藏夹的功能运行良好,但在LG G2等设备上,我没有收到类似列的错误 我的代码: public boolean adjustFavorites(Info info) { String format = "INSERT INTO %s VALUES(%d,'%s','%s','%s');"; String deleteFormat = "DELETE FROM %s WHERE %s=%d ;"; long id = info.getId(); if (

我的控制收藏夹的功能运行良好,但在LG G2等设备上,我没有收到类似列的错误

我的代码:

 public boolean adjustFavorites(Info info) {
    String format = "INSERT INTO %s VALUES(%d,'%s','%s','%s');";
    String deleteFormat = "DELETE FROM %s WHERE %s=%d ;";

    long id = info.getId();
    if (!isExist(id)) {
        String query = String.format(format, TABLE_FAVORITE, id, info.getContent(), info.getTitle(), info.getParent());
        database.execSQL(query);
    } else {
        String query = String.format(deleteFormat, TABLE_FAVORITE, DB_COL_ID, id);
        database.execSQL(query);
    }
    return true;
}

private boolean isExist(long id) {
    String format = "SELECT * FROM %s WHERE %s=%d ;";
    String query = String.format(format, TABLE_FAVORITE, DB_COL_ID, id);

    Cursor cursor = database.rawQuery(query, null);
    if (cursor != null && cursor.moveToFirst())
        if (cursor.getCount() > 0)
            return true;
    return false;
}
错误:

11-14 20:47:28.916  29227-29227/ir.mostafa.book E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: ir.mostafa.book, PID: 29227
    android.database.sqlite.SQLiteException: no such column: ۱۴۱۰۸۷۶۰۹۷۸۰۷ (code 1): , while compiling: SELECT * FROM favorites WHERE id=۱۴۱۰۸۷۶۰۹۷۸۰۷ ;
            at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
            at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:892)
            at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:503)
            at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:726)
            at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
            at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
            at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
            at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1415)
            at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1354)
            at ir.mostafa.book.db.DataBase.isExist(DataBase.java:177)
            at ir.mostafa.book.db.DataBase.adjustFavorites(DataBase.java:162)
            at ir.mostafa.book.activities.ContentViewer.onContextItemSelected(ContentViewer.java:279)
            at android.app.Activity.onMenuItemSelected(Activity.java:2664)
            at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361)
            at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:4037)
            at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
            at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
            at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
            at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167)
            at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:941)
            at android.widget.AdapterView.performItemClick(AdapterView.java:299)
            at android.widget.AbsListView.performItemClick(AbsListView.java:1158)
            at android.widget.AbsListView$PerformClick.run(AbsListView.java:2957)
            at android.widget.AbsListView$3.run(AbsListView.java:3849)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5105)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:515)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
            at dalvik.system.NativeStart.main(Native Method)
11-14 20:47:28.916 29227-29227/ir.mostafa.book E/AndroidRuntime﹕ 致命异常:主
流程:ir.mostafa.book,PID:29227
android.database.sqlite.SQLiteException:无此列:编译时:从id=;
位于android.database.sqlite.SQLiteConnection.nativePrepareStatement(本机方法)
位于android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:892)
位于android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:503)
位于android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:726)
位于android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:58)
位于android.database.sqlite.SQLiteQuery(SQLiteQuery.java:37)
位于android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
位于android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1415)
位于android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1354)
位于ir.mostafa.book.db.DataBase.isExist(DataBase.java:177)
位于ir.mostafa.book.db.DataBase.adjustFavorites(DataBase.java:162)
位于ir.mostafa.book.activities.ContentViewer.onContextItemSelected(ContentViewer.java:279)
在android.app.Activity.onMenuItemSelected上(Activity.java:2664)
在android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361)中
在com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected上(PhoneWindow.java:4037)
位于com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
在com.android.internal.view.menu.menuitemmpl.invoke(menuitemmpl.java:152)上
位于com.android.internal.view.menu.MenuBuilder.performitemation(MenuBuilder.java:874)
位于com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167)
在com.android.internal.app.AlertController$AlertParams$3.onItemClick上(AlertController.java:941)
在android.widget.AdapterView.performItemClick(AdapterView.java:299)上
在android.widget.AbsListView.performItemClick(AbsListView.java:1158)上
在android.widget.AbsListView$PerformClick.run(AbsListView.java:2957)中
在android.widget.AbsListView$3.run(AbsListView.java:3849)
位于android.os.Handler.handleCallback(Handler.java:733)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5105)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:792)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
在dalvik.system.NativeStart.main(本机方法)

问题不在于如何插入值,而在于如何构造SQL查询。您正在使用,它将字符串本地化。与其格式化字符串,不如使用参数化查询:

Cursor cursor = database.query(TABLE_FAVORITE, null, DB_COL_ID+"=?", 
    new String[] { String.valueOf(id) }, null, null, null, null);

我添加了1410876097807作为id,但在这些设备上,它将其转换为utf-8,那么我应该怎么做呢?与utf-8无关,但与utf-8无关。它是该数字的阿拉伯字符串表示形式。如果使用
String.format
,请始终提供特定的区域设置。在这种情况下,
Locale.US
就可以了
String.format(Locale.US,format,TABLE\u FAVORITE,DB\u COL\u ID,ID)
。有趣的是,在正式支持阿拉伯语之前,Android联系人应用程序中就出现了这个bug。我应该如何为sqlite添加
UTF-8
?没问题!如果你发现答案有用,请考虑投票。