Android Sqlite代码(1)错误,没有此类列
我的控制收藏夹的功能运行良好,但在LG G2等设备上,我没有收到类似列的错误 我的代码: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 (
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
?没问题!如果你发现答案有用,请考虑投票。