当前位置: 首页 > 知识库问答 >
问题:

Android SQLite数据库不更新和删除

赫连捷
2023-03-14

这是提供用户输入的主活动

public class Welcome extends AppCompatActivity{
private DBMANAGER_person dbmanager_person;
private ListView listView;
private SimpleCursorAdapter adapter;

final String [] from = new String[]{MyDB.COLUMN_ID, MyDB.COLUMN_NAME, MyDB.COLUMN_AGE, MyDB.COLUMN_HEIGHT , MyDB.COLUMN_WEIGHT};
final int [] to = new int[]{R.id.nameTV,R.id.ageTV,R.id.heightTV,R.id.weightTV};



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

    dbmanager_person = new DBMANAGER_person(this);
    dbmanager_person.open();

    Cursor cursor = dbmanager_person.fetch();

    listView = (ListView) findViewById(R.id.list_view);
    listView.setEmptyView(findViewById(R.id.emptyTV));

    adapter = new SimpleCursorAdapter(this, R.layout.person, cursor, from, to,0);
    adapter.notifyDataSetChanged();

    listView.setAdapter(adapter);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            TextView idTextView = (TextView)view.findViewById(R.id.idTV);
            TextView nameTextView = (TextView) view.findViewById(R.id.nameTV);
            TextView ageTextView = (TextView) view.findViewById(R.id.ageTV);
            TextView heightTextView = (TextView) view.findViewById(R.id.heightTV);
            TextView weightTextView = (TextView) view.findViewById(R.id.weightTV);

            String iD = idTextView.getText().toString();
            String name = nameTextView.getText().toString();
            String age = ageTextView.getText().toString();
            String height = heightTextView.getText().toString();
            String weight = weightTextView.getText().toString();

            Intent intent = new Intent(getApplicationContext(), Modiffy_person_Details.class);
            intent.putExtra("_id",iD);
            intent.putExtra("name", name);
            intent.putExtra("age", age);
            intent.putExtra("height", height);
            intent.putExtra("weight", weight);

            startActivity(intent);


        }
    });
}


@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.add_person,menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if(id == R.id.add){
        Intent intent = new Intent(this,Add_people.class);
        startActivity(intent);

    }else if (id == R.id.logout){
        Intent backToHome = new Intent(this,MainActivity.class);
        startActivity(backToHome);
    }

    return super.onOptionsItemSelected(item);
}

}

这是Add_prople类

公共类Add_people扩展AppCompatActivity实现视图。OnClickListener{private EditText name EditText;private EditText ageEditText;private EditText heightEditText;private EditText weightededittext;

private Button save;
private DBMANAGER_person dbmanager_person;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setTitle("Add People");

    setContentView(R.layout.activity_add_people);

    nameEditText = (EditText)findViewById(R.id.nameET);
    ageEditText = (EditText)findViewById(R.id.ageET);
    heightEditText = (EditText)findViewById(R.id.heightET);
    weightEditText = (EditText)findViewById(R.id.weightET);

    save = (Button)findViewById(R.id.saveBtn);

    dbmanager_person = new DBMANAGER_person(this);
    dbmanager_person.open();
    save.setOnClickListener(this);
}


@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.saveBtn:
            final String name = nameEditText.getText().toString();
            final String age = ageEditText.getText().toString();
            final String height = heightEditText.getText().toString();
            final String weight = weightEditText.getText().toString();

            dbmanager_person.insert(name,age,height,weight);

            Intent main = new Intent(this,Welcome.class)
                    .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivity(main);
            break;

    }

}

}

这是DBMANAGER_person类,CRUD操作在其中工作

这是Modiffy_person_Details类,用户可以更新和删除他们的信息

public class DBMANAGER_person {
private SQLiteDatabase database;
private MyDB myDB;
private Context context;

public DBMANAGER_person(Context context) {
    this.context = context;
}

public DBMANAGER_person open() throws SQLiteException{
    myDB = new MyDB(context);
    database = myDB.getWritableDatabase();
    return this;
}

public void close(){
    myDB.close();
}
public void insert(String name,String age,String height,String weight){
    ContentValues contentValues = new ContentValues();
    contentValues.put(MyDB.COLUMN_NAME,name);
    contentValues.put(MyDB.COLUMN_AGE,age);
    contentValues.put(MyDB.COLUMN_HEIGHT,height);
    contentValues.put(MyDB.COLUMN_WEIGHT,weight);
    database.insert(MyDB.TABLE_NAME,null,contentValues);
}

public Cursor fetch(){
    String[] columns  = new String[]{MyDB.COLUMN_ID, MyDB.COLUMN_NAME, MyDB.COLUMN_AGE , MyDB.COLUMN_HEIGHT, MyDB.COLUMN_WEIGHT};
    Cursor cursor = database.rawQuery( "select rowid _id,* from "+MyDB.TABLE_NAME, null);
    cursor.moveToFirst();
    return cursor;
}

public int update(long id, String name, String age, String height, String weight){
    ContentValues contentValues = new ContentValues();
    contentValues.put(MyDB.COLUMN_NAME,name);
    contentValues.put(MyDB.COLUMN_AGE,age);
    contentValues.put(MyDB.COLUMN_HEIGHT,height);
    contentValues.put(MyDB.COLUMN_WEIGHT,weight);
    int i = database.update(MyDB.TABLE_NAME,contentValues,MyDB.COLUMN_ID + " = "+id,null);
    return i;
}

public void delete(long id){
    database.delete(MyDB.TABLE_NAME, MyDB.COLUMN_ID + "="+ id,null);
}

}

公共类Modify_person_详细信息扩展了AppCompative实现视图。OnClickListener{private EditText Name字段;private EditText ageField;private EditText heightField;private EditText weightField;

private Button update;
private Button delete;

private long _id;
private DBMANAGER_person dbmanager_person;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTitle("Modify Record");
    setContentView(R.layout.activity_modiffy_person__details);

    dbmanager_person = new DBMANAGER_person(this);
    dbmanager_person.open();

    nameField = (EditText)findViewById(R.id.nameEditText);
    ageField = (EditText)findViewById(R.id.ageEditText);
    heightField = (EditText)findViewById(R.id.heightEditText);
    weightField = (EditText)findViewById(R.id.weightEditText);

    update = (Button)findViewById(R.id.update_btn);
    delete = (Button)findViewById(R.id.delete_btn);

    Intent intent = getIntent();
    String ID = intent.getStringExtra("_id");
    String name = intent.getStringExtra("name");
    String age = intent.getStringExtra("age");
    String height = intent.getStringExtra("height");
    String weight = intent.getStringExtra("weight");

    String check_ID = ID;
    if(!check_ID.equals("")) {

        _id = Long.parseLong(ID);
    }/*else{
        Toast.makeText(getApplicationContext(),"There is no id",Toast.LENGTH_LONG).show();
    }*/



        nameField.setText(name);
        ageField.setText(age);
        heightField.setText(height);
        weightField.setText(weight);





    update.setOnClickListener(this);
    delete.setOnClickListener(this);
}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.update_btn:
            String na = nameField.getText().toString();
            String ag = ageField.getText().toString();
            String hei = heightField.getText().toString();
            String wei = weightField.getText().toString();

            dbmanager_person.update( _id , na , ag,hei,wei);
            this.returnHome();
            break;
        case R.id.delete_btn:
            dbmanager_person.delete(_id);
            this.returnHome();
            break;
    }

}

public void returnHome(){
    Intent home_intent = new Intent(getApplicationContext(),Welcome.class)
            .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(home_intent);
}

}

我的问题是,每当我想更新或删除我的信息时,它都不起作用。

共有1个答案

郭洋
2023-03-14

检查delete和update的返回值。对于这两个函数,如果没有受影响的行,则返回0;如果有受影响的行,则返回1。如果是0,那么您的问题是处理SQL查询本身,在这种情况下,首先要检查ID的有效性。

更新

删除

 类似资料:
  • 利用UPDATE和DELETE语句进行操作表数据。 更新数据 UPDATE用来更新修改表中的数据 更新表中特定的行 更新表中所有行 注意: 如果省略了WHERE子句,就会更新所有行。 UPDATE语句有三个部分组合 要更新的表 列名和他们的新值 确定要更新哪些行的过滤条件 mysql> UPDATE Customers -> SET cust_email = '[email protect

  • 问题内容: 我正在使用()查找PostLikes表中的(PostId,UserId),如果找到该行,则用于生成delete指令并删除基础行,如果未找到该行,则用于生成insert命令并使用将该行插入表中。但是该行未插入数据库中的表中。这是我到目前为止所做的 和表 PostLikes(LikeId,PostId,UserId) 问题答案: 有几个问题: 您正在寻找重复使用相同的命令,这两个检测行是否

  • 我想知道ehcache是否有办法检测数据库更新/插入(spring/java,hibernate web应用程序),并使用数据库中的当前(最新)数据刷新其缓存。如果没有,检测数据库更新的最佳方法是什么,以保持与缓存和数据库之间的数据同步?

  • 我目前正在重构遗留代码,以使用Android架构组件,并在一种存储库模式中设置一个房间数据库和截取请求。因此,表示层/域层要求存储库获取LiveData对象进行观察,或告诉他与服务器同步,然后删除旧的db条目,并从服务器中重新提取所有当前条目。 我已经写了同步部分的测试,所以我确信,对象被正确地获取并插入到数据库中。但是当写一个测试来观察db表的条目时(并测试对象是否被正确保存,以及在将它们放入d

  • 我正在使用带有wpf和Entity框架的mvvm模式,并在视图模型和模型中实现了INotifyProperty tyChanged 我使用带有3个文本框控件的多绑定,第一个文本框用于输入名字,第二个文本框用于姓氏 第三个文本框表示全名 使用多重绑定的第三个文本框: 这是我的转换器 这可以完美地工作并将FirstName和LastName保存到数据库,但不会将FullName保存到具有多绑定的数据库

  • 因此,我使用LiveData和ViewModel设置获取和插入数据的功能,并使用Room数据库保存数据。 将数据插入数据库后,我的RecyclerView不会更新数据。 RecyclerAdapterTransaksi.kt 使用RecyclerView显示数据库数据的片段 Pemasukkanframent。kt 使用LiveData的ViewModel类 TransaksiViewModel.