Как обновить запись sqlite? - PullRequest
0 голосов
/ 14 октября 2018

Я кодировал это для моего школьного проекта.Сбой при вызове метода обновления.ошибка приведена ниже:

E / SQLiteLog: (1) таблица userInfo не имеет столбца с именем userInfo E / SqDb: Err ins ... android.database.sqlite.SQLiteException: таблица userInfo не имеет столбцас именем userInfo (код 1): во время компиляции: INSERT INTO userInfo (пароль, userInfo) ЗНАЧЕНИЯ (?,?) в android.database.sqlite.SQLiteConnection.nativePrepareStatement (собственный метод) в android.database.sqlite.SQLiteConnection.acquirePreparedStatement (SQLiteConnection.java:921) в android.database.sqlite.SQLiteConnection.prepare (SQLiteConnection.java:532) в android.database.sqlite.SQLiteSession.prepare (SQLiteSession.java:588) в android.database.sqlite.SQLiteProgram. (SQLiteProgram.java:58) в android.database.sqlite.SQLiteStatement. (SQLiteStatement.java:31) в android.database.sqlite.SQLiteDatabase.insertWithOnConflict (SQLiteDatabase.java:1570) в android.database.sqlite.SQLiteDatabase.insert (SQLiteDatabase.java:1427) на com.example.prabuddhaabisheka.mock.DBHelper.addInfo (DBHelper.java:46) на com.example.prabuddhaabisheka.mock.Home $ 2.onClick (Home.java:59) на android.view.View.performClick (View.java:5232) на android.view.View $ PerformClick.run (View.java:21289) наandroid.os.Handler.handleCallback (Handler.java:739) на android.os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:168) на android.app.ActivityThread.main (ActivityThread.java:5885) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:797) в com.android.internal.os.ZygoteInit.main (ZygoteInit.java:687)

public class EditProfile extends AppCompatActivity {

Button search, edit, delete;
EditText name, password, dob;
RadioButton male,female;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_edit_profile);

    search = findViewById(R.id.buttonSerach);
    edit = findViewById(R.id.buttonEdit);
    delete = findViewById(R.id.Delete);

    name = findViewById(R.id.editTextName);
    password = findViewById(R.id.editTextPassword);
    dob = findViewById(R.id.editTextDOB);
    male = (RadioButton) findViewById(R.id.radioButtonMale);
    female = findViewById(R.id.radioButtonFemale);

}

public void  search(View view){

    DBHelper dbHelper = new DBHelper(this);

    String givenName = name.getText().toString();

    ArrayList<userInfo> user ;

    user = dbHelper.readAllInfo();

    if(!user.isEmpty()) {
        for (userInfo u : user) {

            if (givenName.equals(u.name)) {

                password.setText(u.password);
                dob.setText(u.dob);
                if ("Male".equals(u.gender)) {
                    male.setChecked(true);
                    female.setChecked(false);
                } else {

                    male.setChecked(false);
                    female.setChecked(true);
                }
            }
        }
    }
}

public void update(View view){

    DBHelper dbHelper = new DBHelper(this);

    String givenName = name.getText().toString();

    int id = 0;

    ArrayList<userInfo> user;

    user = dbHelper.readAllInfo();

    if(!user.isEmpty()) {

        for (userInfo u : user) {

            if (givenName.equals(u.name)) {

                id = u.id;
            }
        }
    }
    String givenDob = dob.getText().toString();
    String givenPassword = name.getText().toString();

    String gender;

    if (male.isChecked()){

        gender = "Male";
    }
    else{
        gender = "Female";
    }


    boolean updated = dbHelper.updateInfo(id,givenName,givenPassword,givenDob,gender);

    if (updated) {
        Toast toast = Toast.makeText(this, "Updated", Toast.LENGTH_SHORT);
        toast.show();
    }
    else{
        Toast toast = Toast.makeText(this, "Update failed !", Toast.LENGTH_SHORT);
        toast.show();
    }

}


}

Класс DBHelper также указан ниже

 public class DBHelper extends SQLiteOpenHelper {

public DBHelper(Context context) {
    super(context, UserProfile.Users.DB_NAME, null, 1);
}

@Override
public void onCreate(SQLiteDatabase db) {

    String createTable = "CREATE TABLE "+ UserProfile.Users.TABLE_NAME +" ("+
            UserProfile.Users._ID + "INTEGER PRIMARY KEY," +
            UserProfile.Users.TABLE_COLUMN_USERNAME + "TEXT,"+
            UserProfile.Users.TABLE_COLUMN_PASSWORD + "TEXT," +
            UserProfile.Users.TABLE_COLUMN_DOB + "TEXT,"+
            UserProfile.Users.TABLE_COLUMN_GENDER + "TEXT)";

    db.execSQL(createTable);
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}

public boolean addInfo( ContentValues values ){

    SQLiteDatabase db = getWritableDatabase();

    long added = db.insert(UserProfile.Users.TABLE_NAME,null,value);

    return (added != 0);
}

public boolean updateInfo(int id, String name, String password, String dob, String gender ){

    SQLiteDatabase db = getReadableDatabase();

    ContentValues values = new ContentValues();

    values.put(UserProfile.Users.TABLE_COLUMN_USERNAME,name);
    values.put(UserProfile.Users.TABLE_COLUMN_PASSWORD,password);
    values.put(UserProfile.Users.TABLE_COLUMN_DOB,dob);
    values.put(UserProfile.Users.TABLE_COLUMN_GENDER,gender);

    String where = UserProfile.Users._ID + " =";

    String[] arg = {Integer.toString(id)};

    int row = db.update(UserProfile.Users.TABLE_NAME, values, where, arg);

    return (row !=0 );
}

public ArrayList readAllInfo(){

    SQLiteDatabase db = getReadableDatabase();

    String[] columns = {
            UserProfile.Users._ID,
            UserProfile.Users.TABLE_COLUMN_USERNAME,
            UserProfile.Users.TABLE_COLUMN_PASSWORD,
            UserProfile.Users.TABLE_COLUMN_GENDER,
            UserProfile.Users.TABLE_COLUMN_DOB
    };

    Cursor cursor = db.query(UserProfile.Users.TABLE_NAME,columns,null,null,null
    ,null,null);

    ArrayList<userInfo> users = new ArrayList<>();

    while (cursor.moveToNext()){

        int id = cursor.getInt(cursor.getColumnIndexOrThrow(UserProfile.Users._ID));
        String name = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.TABLE_COLUMN_USERNAME));
        String dob = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.TABLE_COLUMN_DOB));
        String gender = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.TABLE_COLUMN_GENDER));
        String password = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.TABLE_COLUMN_PASSWORD));

        userInfo user = new userInfo(id,name,password,dob,gender);

        users.add(user);
    }

    cursor.close();
    return users;
}

public ArrayList readAllInfo(int id){

    SQLiteDatabase db = getReadableDatabase();

    String[] columns = {
            UserProfile.Users._ID,
            UserProfile.Users.TABLE_COLUMN_USERNAME,
            UserProfile.Users.TABLE_COLUMN_PASSWORD,
            UserProfile.Users.TABLE_COLUMN_GENDER,
            UserProfile.Users.TABLE_COLUMN_DOB
    };

    String where = UserProfile.Users._ID + " =?";
    String[] arg = {Integer.toString(id)};

    Cursor cursor = db.query(UserProfile.Users.TABLE_NAME,columns,where,arg,null
    ,null,null);

    ArrayList<userInfo> users = new ArrayList<>();

    while (cursor.moveToNext()){

        //int ID = cursor.getInt(cursor.getColumnIndexOrThrow(UserProfile.Users._ID));
        String name = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.TABLE_COLUMN_USERNAME));
        String dob = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.TABLE_COLUMN_DOB));
        String gender = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.TABLE_COLUMN_GENDER));
        String password = cursor.getString(cursor.getColumnIndexOrThrow(UserProfile.Users.TABLE_COLUMN_PASSWORD));

        userInfo user = new userInfo(id,name,password,dob,gender);

        users.add(user);
    }

    cursor.close();
    return users;
}

public void deleteUser(int ID){

    SQLiteDatabase db = getReadableDatabase();

    String where = UserProfile.Users._ID + " =?";
    String[] arg = {Integer.toString(ID)};

    int count = db.delete(UserProfile.Users.TABLE_NAME,where,arg);

}

}

Ответы [ 3 ]

0 голосов
/ 15 октября 2018

Если вы пытаетесь добавить новую строку в таблицу после ее создания, попробуйте удалить таблицу и создать ее заново.

для удаления

 sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

после этого,Вы можете воссоздать таблицу снова

0 голосов
/ 15 октября 2018

Вы должны увеличить свою версию базы данных после того, как внесете изменения в метод On-upgrade sqlite.

   @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        if(newVersion > oldVersion){
            db.execSQL("DROP TABLE IF EXISTS " +......);
            db.execSQL("CREATE TABLE IF NOT EXISTS " +......);

            insertColumnIfNotAvailableinTable(SQLiteDatabase db, String tableName, String columnName, String columnType);



        }
    } 
0 голосов
/ 14 октября 2018

Ошибка ясна:

...
.sqlite.SQLiteException: table userInfo has no column named userInfo (code 1):
, while compiling: INSERT INTO userInfo(password,userInfo) VALUES (?,?) at
...

Когда вы вызываете метод

public boolean addInfo( ContentValues values )

Вы передаете в качестве значения содержимого значение, имя которого совпадает с именем таблицы.,Вы должны проверить две вещи:

  1. Где вы используете UserProfile.Users.TABLE_NAME (что, я полагаю, имеет значение userInfo
  2. Проверьте, что вы передаете значениям содержимого, используемым addInfo method.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...