android - 未从 SQLite 中删除的行
问题描述
我正在尝试从 GoalWeight、Goal Date 和 Current Weight 的输入中删除该行。它没有出错,但该行没有被删除。
删除布局
Button deleteB;
DatabaseHelper myDB;
EditText goalD;
EditText goalW;
EditText currentW;
Intent j;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.deletelayout);
deleteB = findViewById(R.id.buttonDelete);
myDB = new DatabaseHelper(this);
deleteB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
goalD = findViewById(R.id.goaldinput2);
goalW = findViewById(R.id.goalwinput3);
currentW = findViewById(R.id.currentWinput2);
if(goalD.length() !=0 && goalW.length() !=0 && currentW.length() !=0){
Toast.makeText(DeleteLayout.this,"Goal Date: " +goalD.getText().toString()+ "Goal Weight: " + goalW.getText().toString()+
"Current Weight: " +currentW.getText().toString()+ " entered.",
Toast.LENGTH_LONG).show();
myDB.deleteContent(goalD.getText().toString(), goalW.getText().toString(), currentW.getText().toString());
j = new Intent(DeleteLayout.this, historyActivity.class);
startActivity(j);
}
else{
Toast.makeText(DeleteLayout.this,"All data not entered.", Toast.LENGTH_LONG).show();
}
}
});
DatabaseHelper 中的删除方法
public void deleteContent(String goalDate, String goalWeight,String currentWeight){
SQLiteDatabase db = this.getWritableDatabase();
String query = " DELETE FROM " + TABLE_NAME + "WHERE GDATE = "+
goalDate + " AND " + "GWEIGHT = " + goalWeight + " AND " + "CWEIGHT = " + currentWeight ;
}
解决方案
主要问题(不是唯一的问题)是在内部deleteContent()
,尽管您创建了 SQL 语句,但您从不通过 say 执行它execSQL()
。
因此,不会尝试删除任何行。
但是,您应该更改为使用该delete()
方法,如下所示:
public int deleteContent(String goalDate, String goalWeight, String currentWeight){
SQLiteDatabase db = this.getWritableDatabase();
String where = "GDATE = ? AND GWEIGHT = ? AND CWEIGHT = ?";
int rows = db.delete(TABLE_NAME, where, new String[] {goalDate, goalWeight, currentWeight});
db.close();
return rows;
}
这是推荐的方式,因为它是安全的,并且它还返回受影响/删除的行数(您可以检查以检查删除是否成功)。
所以你可以像这样使用它:
int rows = myDB.deleteContent(
goalD.getText().toString(),
goalW.getText().toString(),
currentW.getText().toString()
);
在变量中,rows
您将获得已删除行的数量。
推荐阅读
- emacs - (Emacs) 括号没有正确缩进
- wordpress - woocommerce_shared_settings 弃用的控制台错误
- python - 从 JSON 文件读取的解包列表到函数调用
- java - 如何从 Java 成功与 python Twisted 服务器通信?
- javascript - 在 Google 表格中,如何扫描整个列以查找错误单元格并将内容替换为上面单元格中的内容?
- node.js - Alexa - How to send image to user?
- python - Is there a better way to check months and days to print the seasons in python? I cant use def and class or loops
- python - RobotFramework Having keywords and Test template
- c# - Get VID/ PID of printer using C# with unknown device id
- c++ - `io_context.stop()` 与 `socket.close()`