每日日报

Android下数据库操作表(通过sql语句)

 

       相关API

 

                ①插入删除修改相关操作 sqlitedatabase的 execSQL方法

 

                ②查询操作  sqlitedatabase的 rawQuery方法

 

                ③ 查询结果返回 Curor(游标 类似JDBC中的ResultSet)

 

                        curor相关方法 moveToNext() 移动到下一行

 

                                                 getCount() 返回查询到的结果一共有多少行

 

                                                 getColumnCount()返回一条结果中有多少列

 

                                                 getString(index), getInt(index) 根据列序号返回相应记录(序号从0开始)

 

        代码

 

  1. public void insert(View v) {
  2. SQLiteDatabase db = openHelper.getReadableDatabase();
  3. db.execSQL("insert into info(name,phone) values('赵四','13888888888')");
  4. db.execSQL("insert into info(name,phone) values('王五','13888888888')");
  5. db.close();
  6. }
  7. public void update(View v) {
  8. SQLiteDatabase db = openHelper.getReadableDatabase();
  9. db.execSQL("update info set phone = '12345678' where name='赵四' ");
  10. db.close();
  11. }
  12. public void delete(View v) {
  13. SQLiteDatabase db = openHelper.getReadableDatabase();
  14. db.execSQL("delete from info where name = '赵四'");
  15. db.close();
  16. }
  17. public void query(View v) {
  18. SQLiteDatabase db = openHelper.getReadableDatabase();
  19. Cursor cursor = db.rawQuery("select * from info where name = ? ; ", new String[]{"王五"});
  20. while(cursor.moveToNext()){
  21. for (int i = 0; i < cursor.getColumnCount(); i++) {
  22. String result = cursor.getString(i);
  23. Log.d("MainActivity", result+"");
  24. }
  25. }
  26. db.close();
  27. }

 

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. //最终是通过字符串拼接的形式 帮助生成sql 避免写错
  16. //result 返回值是插入行的行号 如果返回-1说明插入失败
  17. long result = sqLiteDatabase.insert(table, nullColumnHack, values);
  18. if(result>=0){
  19. Toast.makeText(this, "插入到第"+result+"行", Toast.LENGTH_SHORT).show();
  20. }else{
  21. Toast.makeText(this, "插入失败", Toast.LENGTH_SHORT).show();
  22. }
  23. sqLiteDatabase.close();
  24. }
  25. public void delete1(View v) {
  26. SQLiteDatabase sqLiteDatabase = openHelper.getReadableDatabase();
  27. //--delete from info where name='王五';
  28. //sqLiteDatabase.execSQL("delete from info where name=?;", new Object[]{"赵四"});
  29. //第二个参数 where条件 where后面的内容 具体删除的值用?代替
  30. String whereClause = "name = ? and phone = ?";
  31. //第三个参数 在where条件中 用?代替的具体的值
  32. String[] whereArgs = new String[]{"赵四","13888888888"};
  33. int num = sqLiteDatabase.delete("info", whereClause, whereArgs);
  34. if(num>0){
  35. Toast.makeText(this, "删除了"+num+"行", Toast.LENGTH_SHORT).show();
  36. }else{
  37. Toast.makeText(this, "没删,失败", Toast.LENGTH_SHORT).show();
  38. }
  39. sqLiteDatabase.close();
  40. }
  41. public void update1(View v) {
  42. SQLiteDatabase sqLiteDatabase = openHelper.getReadableDatabase();
  43. //--update info set phone='139999999'where name='王五';;
  44. //sqLiteDatabase.execSQL("update info set phone=? where name=?", new Object[]{"1399999999","赵四"});
  45. ContentValues values = new ContentValues();
  46. values.put("phone", "13999999999");
  47. String whereClause = "name = ?";
  48. String[] whereArgs = new String[]{"赵四"};
  49. int num = sqLiteDatabase.update("info", values, whereClause, whereArgs);
  50. if(num>0){
  51. Toast.makeText(this, "更新了"+num+"行", Toast.LENGTH_SHORT).show();
  52. }else{
  53. Toast.makeText(this, "没更新,失败", Toast.LENGTH_SHORT).show();
  54. }
  55. sqLiteDatabase.close();
  56. }
  57. public void query1(View v) {
  58. SQLiteDatabase sqLiteDatabase = openHelper.getReadableDatabase();
  59. //--select name,phone from info;;
  60. //Cursor cursor = sqLiteDatabase.rawQuery("select * from info", null);
  61. String[] columns = null;//要查询的列名字 如果传null 相当于select * from info;
  62. String selection = null; //查询的条件 其中又变化的部分要用? 替换
  63. String[] selectionArgs = null; //查询条件中 ? 所对应的值
  64. String groupBy = null;//分组
  65. String having = null;//分组接的条件
  66. String orderBy = null;//排序
  67. Cursor cursor = sqLiteDatabase.query("info", columns, selection, selectionArgs, groupBy, having, orderBy);
  68. if(cursor!=null && cursor.getCount()>0){
  69. while(cursor.moveToNext()){
  70. String name = cursor.getString(1);
  71. String phone = cursor.getString(cursor.getColumnIndex("phone"));
  72. Log.e("sqlite", "name==="+name+"phone==="+phone);
  73. }
  74. }
  75. cursor.close();
  76. sqLiteDatabase.close();
  77. }

对比

 

    大量数据效率 SQL语句灵活性 方法是否有返回值 SQL出错概率
通过sql执行CRUD 效率高 灵活性强任意发挥 除查询外无 有可能出错
通过api执行CRUD 需要拼语句效率低 受api限制 都有返回值 不会出错
上一篇:安卓增删改查


下一篇:增删改查