Android Studio点击按钮向SQLite插入客户测量数据失败求助
问题根因及修复方案
核心错误:插入结果判断逻辑写反
SQLiteDatabase.insert() 方法的返回值规则为:
- 插入成功时返回新记录的行ID,是大于0的正整数
- 插入失败时返回
-1
你现有代码中判断逻辑完全颠倒:插入成功时r≠0返回false,插入失败时才返回true,所以即使数据实际插入成功,也会弹出失败提示。
潜在问题
- 如果之前修改过
CUSTOMER表的字段结构但未升级数据库版本,旧表字段缺失也会导致插入失败,可将MyHelper中的version常量值加1触发表结构重建。 - 未做输入非空校验,若用户输入的姓名、手机号等字段为空,也可能触发插入异常。
修复后代码示例
MyHelper#insert_data方法修改
public Boolean insert_data(String name1, String phoneno1,String lenght1,String teera1,String bazu1,String chati1,String qamar1,String shalwar1,String paincha1,String gheera1,String front1,String side1,String hip1,String ban1,String collar1,String zip1,String t_paincha1,String others1) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues c = new ContentValues(); long r = -1; try { c.put("NAME", name1); c.put("PHONENO", phoneno1); c.put("LENGHT", lenght1); c.put("TEERA", teera1); c.put("BAZU", bazu1); c.put("CHATI", chati1); c.put("QAMAR", qamar1); c.put("SHALWAR", shalwar1); c.put("PAINCHA", paincha1); c.put("GHEERA", gheera1); c.put("FRONT", front1); c.put("SIDE", side1); c.put("HIP", hip1); c.put("BAN", ban1); c.put("COLLAR", collar1); c.put("ZIP", zip1); c.put("T_PAINCHA", t_paincha1); c.put("OTHERS", others1); r = db.insert("CUSTOMER", null, c); } catch (Exception e) { e.printStackTrace(); return false; } // 修改判断逻辑:返回值大于0代表插入成功 return r > 0; }
Add_Customer添加入参校验
在调用insert_data前增加必填项校验:
// 获取所有输入参数后先校验必填项 if (customername.trim().isEmpty() || phoneno.trim().isEmpty()) { Toast.makeText(Add_Customer.this, "姓名和手机号为必填项", Toast.LENGTH_SHORT).show(); return; } Boolean i= myhelper.insert_data(customername,phoneno,lenght,teera,bazu,chati,qamar,shalwar,paincha,"7","7","7","7","7","7","9","9",others);
内容的提问来源于stack exchange,提问作者Atif Murtaza 2311
相关产品推荐
相关产品推荐

