Я впервые использую SQLite и пытаюсь освоить базовые операции CRUD, поэтому сталкиваюсь с проблемой при обновлении записей. Я искал решение, в решении сказали, что удалите приложение и попробуйте, я пытался, но каждый раз получал одну и ту же ошибку. Пожалуйста, помогите мне решить эту проблему.
The Error I am getting
19 12:26:26.318 5113-5113/com.example.demointent E/SQLiteLog: (1) no such column: key_name
2019-08-19 12:26:26.320 5113-5113/com.example.demointent D/AndroidRuntime: Shutting down VM
2019-08-19 12:26:26.323 5113-5113/com.example.demointent E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.demointent, PID: 5113
java.lang.IllegalStateException: Could not execute method for android:onClick
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:390)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.database.sqlite.SQLiteException: no such column: key_name (code 1 SQLITE_ERROR): , while compiling: UPDATE user_table SET key_name=?,key_phone=?,key_email=? WHERE id=?
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:903)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:514)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1667)
at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1615)
at com.example.demointent.MyDbHandler.updateUserDetails(MyDbHandler.java:96)
at com.example.demointent.UpdateUserActivity.update(UpdateUserActivity.java:46)
at java.lang.reflect.Method.invoke(Native Method)
at androidx.appcompat.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:385)
at android.view.View.performClick(View.java:6597)
at android.view.View.performClickInternal(View.java:6574)
at android.view.View.access$3100(View.java:778)
at android.view.View$PerformClick.run(View.java:25885)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Это мой класс DBHelper
public class MyDbHandler extends SQLiteOpenHelper {
private static String key_id = "id";
private static String key_name = "name";
private static String key_email = "email";
private static String key_phone = "phone";
private static String key_table = "user_table";
public MyDbHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
String create_user = "CREATE TABLE "+key_table+"("+key_id+" INTEGER PRIMARY KEY ,"+key_name+" TEXT ,"+key_email+" TEXT ,"+key_phone+" TEXT "+")";
sqLiteDatabase.execSQL(create_user);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
public boolean updateUserDetails(UserModel userModel){
SQLiteDatabase database = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("key_name",userModel.getName());
contentValues.put("key_email",userModel.getEmail());
contentValues.put("key_phone",userModel.getPhone());
database.update(key_table,contentValues,"id=?", new String[] {userModel.getId()});
return true;
}
2 ответа
Вы объявили
private static String key_name = "name";
Принимая во внимание, что вы пытаетесь обновить данные пользователя:
contentValues.put("key_name",userModel.getName());
Разница здесь в том, что «имя» и «имя ключа». Чтобы решить эту проблему, вы должны использовать константы имени столбца для операций CRUD.
contentValues.put(key_name,userModel.getName());
contentValues.put(key_email,userModel.getEmail());
contentValues.put(key_phone,userModel.getPhone());
Измените эти строки кода.
ContentValues contentValues = new ContentValues();
contentValues.put("key_name",userModel.getName());
contentValues.put("key_email",userModel.getEmail());
contentValues.put("key_phone",userModel.getPhone());
Чтобы
ContentValues contentValues = new ContentValues();
contentValues.put(key_name ,userModel.getName());
contentValues.put(key_email,userModel.getEmail());
contentValues.put(key_phone,userModel.getPhone());
Похожие вопросы
Новые вопросы
android
Android — это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфонов, планшетов, автомобилей, телевизоров, одежды, очков, IoT). Для тем, связанных с Android, используйте теги, специфичные для Android, такие как android-intent, android-activity, android-adapter и т. д. Для вопросов, отличных от разработки или программирования, но связанных с Android framework, используйте эту ссылку: https://android .stackexchange.com.