Android下数据库操作表的优雅方法(通过谷歌提供的api)
相关api
①insert方法②delete方法
③update方法
④query方法
1. public void insert1(View v) { 2. SQLiteDatabase sqLiteDatabase = openHelper.getReadableDatabase(); 3. //--insert into info(name,phone) values('赵四','13777777'); 4. //--insert into info() values(); 5. //sqLiteDatabase.execSQL("insert into info(name,phone) values(?,?)", new Object[]{"赵四","1388888888"}); 6. //第一个参数 表名字 7. String table = "info"; 8. //第二个参数 避免产生插入空列的sql 如果第三个参数为空 sql会变成insert into info() values(); 9. //如果传了nullColumnHack 并且第三个参数没有传 是空的情况 sql 会拼接成如下情况: insert into info(name) values(NULL) 10. String nullColumnHack = null; 11. //第三个参数 通过map的形式 保存要插入的列名 和对应的值 12. ContentValues values = new ContentValues(); 13. values.put("name", "赵四"); 14. values.put("phone", "188888888888"); 15. 16. //最终是通过字符串拼接的形式 帮助生成sql 避免写错 17. //result 返回值是插入行的行号 如果返回-1说明插入失败 18. long result = sqLiteDatabase.insert(table, nullColumnHack, values); 19. if(result>=0){ 20. Toast.makeText(this, "插入到第"+result+"行", Toast.LENGTH_SHORT).show(); 21. }else{ 22. Toast.makeText(this, "插入失败", Toast.LENGTH_SHORT).show(); 23. } 24. sqLiteDatabase.close(); 25. } 26. 27. public void delete1(View v) { 28. SQLiteDatabase sqLiteDatabase = openHelper.getReadableDatabase(); 29. //--delete from info where name='王五'; 30. //sqLiteDatabase.execSQL("delete from info where name=?;", new Object[]{"赵四"}); 31. //第二个参数 where条件 where后面的内容 具体删除的值用?代替 32. String whereClause = "name = ? and phone = ?"; 33. //第三个参数 在where条件中 用?代替的具体的值 34. String[] whereArgs = new String[]{"赵四","13888888888"}; 35. int num = sqLiteDatabase.delete("info", whereClause, whereArgs); 36. if(num>0){ 37. Toast.makeText(this, "删除了"+num+"行", Toast.LENGTH_SHORT).show(); 38. }else{ 39. Toast.makeText(this, "没删,失败", Toast.LENGTH_SHORT).show(); 40. } 41. sqLiteDatabase.close(); 42. 43. } 44. 45. public void update1(View v) { 46. SQLiteDatabase sqLiteDatabase = openHelper.getReadableDatabase(); 47. //--update info set phone='139999999'where name='王五';; 48. //sqLiteDatabase.execSQL("update info set phone=? where name=?", new Object[]{"1399999999","赵四"}); 49. ContentValues values = new ContentValues(); 50. values.put("phone", "13999999999"); 51. String whereClause = "name = ?"; 52. String[] whereArgs = new String[]{"赵四"}; 53. int num = sqLiteDatabase.update("info", values, whereClause, whereArgs); 54. if(num>0){ 55. Toast.makeText(this, "更新了"+num+"行", Toast.LENGTH_SHORT).show(); 56. }else{ 57. Toast.makeText(this, "没更新,失败", Toast.LENGTH_SHORT).show(); 58. } 59. sqLiteDatabase.close(); 60. 61. } 62. 63. public void query1(View v) { 64. SQLiteDatabase sqLiteDatabase = openHelper.getReadableDatabase(); 65. //--select name,phone from info;; 66. //Cursor cursor = sqLiteDatabase.rawQuery("select * from info", null); 67. String[] columns = null;//要查询的列名字 如果传null 相当于select * from info; 68. String selection = null; //查询的条件 其中又变化的部分要用? 替换 69. String[] selectionArgs = null; //查询条件中 ? 所对应的值 70. String groupBy = null;//分组 71. String having = null;//分组接的条件 72. String orderBy = null;//排序 73. Cursor cursor = sqLiteDatabase.query("info", columns, selection, selectionArgs, groupBy, having, orderBy); 74. if(cursor!=null && cursor.getCount()>0){ 75. while(cursor.moveToNext()){ 76. String name = cursor.getString(1); 77. String phone = cursor.getString(cursor.getColumnIndex("phone")); 78. Log.e("sqlite", "name==="+name+"phone==="+phone); 79. } 80. } 81. cursor.close(); 82. sqLiteDatabase.close(); 83. 84. }
简单粗暴 VS 优雅方法 PK
大量数据效率 | SQL语句灵活性 | 方法是否有返回值 | SQL出错概率 | |
通过sql执行CRUD | 效率高 | 灵活性强任意发挥 | 除查询外无 | 有可能出错 |
通过api执行CRUD | 需要拼语句效率低 | 受api限制 | 都有返回值 | 不会出错 |