java - 在将订单添加到数据库之前检查是否满足条件
问题描述
我试图确保用户选择了一个服务员 id(第一个 if 语句)并且该 id 是有效的并且与数据库中的记录相关(else if 语句)。
我正在id
从 a中收集Number (GUI Text in Android)
并选择这样的Number
值
EditText waiter_id;
waiter_id = (EditText) findViewById(R.id.waiter_id);
TextUtils.isEmpty(waiter_id.getText()
检查以确保输入了一个值,如果没有,则显示一条消息。
在我调用在DataBaseHelper isEmployee(String id)
类中创建的方法之后,该方法使用id
用户输入的内容在数据库中搜索该记录。如果在数据库中未找到该 ID,则应显示一条消息以提醒用户。
Order onClick OrderActivity
order.setOnClickListener(new View.OnClickListener() {
Order order;
@Override
public void onClick(View view) {
if (TextUtils.isEmpty(waiter_id.getText())) {
Toast.makeText(OrderActivity.this, "Please select waiter id", Toast.LENGTH_SHORT).show();
// This is where the method which returns the boolean is called using
// the value in the Number field in xml file
} else if (!dbHelp.isEmployee(String.valueOf(waiter_id))){
Toast.makeText(OrderActivity.this, "Id not valid", Toast.LENGTH_SHORT).show();
}
});
查询数据库DataBaseHelper类的方法
public Boolean isEmployee(String id){
SQLiteDatabase db = this.getReadableDatabase();
String findEmployeeUsingId = "SELECT * FROM " + EMP_TABLE +
" WHERE " + ID_EMP + " = " + id;
Cursor cursor = db.rawQuery(findEmployeeUsingId, null);
if (cursor.getCount() == 0) {
return false;
}
else
return true;
}
我收到的错误消息是:
com.example.dropit E/SQLiteLog: (1) near ".": syntax error in "SELECT * FROM EMP_TABLE WHERE ID = androidx.appcompat.widget.AppCompatEditText{93d8cbb VFED..CL. .F...... 249,193-829,317 #7f08011f app:id/waiter_id aid=1073741824}"
android.database.sqlite.SQLiteException: near ".": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM EMP_TABLE WHERE ID = androidx.appcompat.widget.AppCompatEditText{93d8cbb VFED..CL. .F...... 249,193-829,317 #7f08011f app:id/waiter_id aid=1073741824}
at com.example.dropit.DataBaseHelper.isEmployee(DataBaseHelper.java:283)
at com.example.dropit.OrderActivity$1.onClick(OrderActivity.java:58)
解决方案
waiter_id
是一个EditText
而不是一个字符串。
当你打电话时,isEmployee()
你应该传递它的文字:
else if (!dbHelp.isEmployee(waiter_id.getText().toString()))
还要在内部使用?
占位符rawQuery()
而不是连接参数:
String findEmployeeUsingId = "SELECT * FROM " + EMP_TABLE + " WHERE " + ID_EMP + " = ?";
Cursor cursor = db.rawQuery(findEmployeeUsingId, new String[] {id});
推荐阅读
- javascript - JSS 中的 MUI 全局类名称有多可靠?
- oracle - 如何创建触发器以将所有 DML 存储在 oracle 中?
- c++ - 使用 Qt 库在 C++ 中解析 json 数据
- javascript - 如何将对象内部的所有键值组合到es6中的新数组中
- python-3.x - 从具有值列表的列中检索唯一值
- java - Java 14 记录 json 序列化
- sql - 我如何更改 SQL 以避免 WHERE 中的 DISTINCT 和 2 个字段?
- angular-cli - 如何运行本地 ng serve 而不是全局安装的主机 0.0.0.0
- java - 模型映射器给出错误无法将 java.lang.String 转换为 java.math.BigDecimal 目标和源都是字符串
- c# - 不支持嵌套查询。操作 1='案例' 操作 2='收集'