每日日报

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限制 都有返回值 不会出错
上一篇:Python+selenium_web自动化测试框架调试过程


下一篇:VS 2017 Web项目需要安装Sql Server 2012 Express LocalDB问题