• Android随笔


    充分学习sqlite的使用

    使用SQLite图形化工具查看db文件

    这类软件有很多,笔者用的是SQLite Expert Professional,当然你也可以使用其他工具 又需要的可以下载:SQLiteExpert.zip

    把我们的db文件导出到电脑桌面,打开SQLiteExpert,界面如下:

    别问我怎么玩,导入db后自己慢慢玩,用法很简单,不懂百度~


    至于方法二,本来是想试试的,后来发现sqlite命令找不到,试了几次就算了, 后面用到在细扣,有兴趣可以找下郭霖的《第一行代码——Android》按着流程图试试! 这里只贴前面的一部分,命令部分自己看书!

    方法2:adb shell命令行带你装逼带你飞

    1.配置SDK环境变量:

    右键我的电脑 ——> 高级系统设置 -> 环境变量 -> 新建系统变量 -> 把SDK的platform-tools路径拷贝下: 比如笔者的:C:SoftwareCodingandroid-sdks-asplatform-tools

    确定,然后再找到Path的环境变量,编辑,然后在结尾加上:%SDK_HOME%;

    然后打开命令行,输入adb,唰唰唰一堆东西,就说明配置成功了!

    ——————重点——————: 在执行后续命令行指令之前,针对你的测试的机器可能有几种: 1.原生模拟器:那行,你跳过这里,继续往下 2.Genymotion模拟器:没戏,Genymotion Shell执行不了下述命令 3.真机(已root):那么你打开File Explorer看看data/data/目录下有东西没?没么? 下面提供一个方法,就是先装个RE文件管理器,然后授予RE Root权限,接着来到根目录: 然后长按data目录,会弹出这样的对话框:

    接着等他慢慢修改权限,修改完毕后,我们再次打开DDMS的File Explorer,我们可以看到:

    好的,可以看到data/data里的东西了! ——————————————————————

    2.进入adb shell,接着键入下述指令,来到我们app的databases目录下:

    接着依次输入下述指令:

    • sqlite3 my.db :打开数据库文件
    • .table 查看数据库中有哪些表 接着你直接输入数据库语句就可以了,比如查询:Select * from person
    • .schema:查看建表语句
    • .quit:退出数据库的编辑
    • .exit:退出设备控制台

    ...因为system/bin/sh sqlite3: not found,这个问题,后面Sqlite命令的都用不了, 要看效果图就自行查询郭大侠的书吧~而下面我们还是先导出db文件,然后用图形化的 数据库工具来查看!


    4.使用Android提供的API操作SQLite

    假如你没学过数据库相关的语法,或者你懒,不想写数据库语法,就可以使用Android给我们 提供的操作数据库的一些API方法,下面我们写个简单的例子来掩饰下这些API的用法!

    代码示例

    运行效果图

    实现代码

    布局过于简单,就四个Button,就不贴了,直接贴MainActivity.java的代码:

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private Context mContext;
        private Button btn_insert;
        private Button btn_query;
        private Button btn_update;
        private Button btn_delete;
        private SQLiteDatabase db;
        private MyDBOpenHelper myDBHelper;
        private StringBuilder sb;
        private int i = 1;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mContext = MainActivity.this;
            myDBHelper = new MyDBOpenHelper(mContext, "my.db", null, 1);
            bindViews();
        }
    
        private void bindViews() {
            btn_insert = (Button) findViewById(R.id.btn_insert);
            btn_query = (Button) findViewById(R.id.btn_query);
            btn_update = (Button) findViewById(R.id.btn_update);
            btn_delete = (Button) findViewById(R.id.btn_delete);
    
            btn_query.setOnClickListener(this);
            btn_insert.setOnClickListener(this);
            btn_update.setOnClickListener(this);
            btn_delete.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            db = myDBHelper.getWritableDatabase();
            switch (v.getId()) {
                case R.id.btn_insert:
                    ContentValues values1 = new ContentValues();
                    values1.put("name", "呵呵~" + i);
                    i++;
                    //参数依次是:表名,强行插入null值得数据列的列名,一行记录的数据
                    db.insert("person", null, values1);
                    Toast.makeText(mContext, "插入完毕~", Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn_query:
                    sb = new StringBuilder();
                    //参数依次是:表名,列名,where约束条件,where中占位符提供具体的值,指定group by的列,进一步约束
                    //指定查询结果的排序方式
                    Cursor cursor = db.query("person", null, null, null, null, null, null);
                    if (cursor.moveToFirst()) {
                        do {
                            int pid = cursor.getInt(cursor.getColumnIndex("personid"));
                            String name = cursor.getString(cursor.getColumnIndex("name"));
                            sb.append("id:" + pid + ":" + name + "
    ");
                        } while (cursor.moveToNext());
                    }
                    cursor.close();
                    Toast.makeText(mContext, sb.toString(), Toast.LENGTH_SHORT).show();
                    break;
                case R.id.btn_update:
                    ContentValues values2 = new ContentValues();
                    values2.put("name", "嘻嘻~");
                    //参数依次是表名,修改后的值,where条件,以及约束,如果不指定三四两个参数,会更改所有行
                    db.update("person", values2, "name = ?", new String[]{"呵呵~2"});
                    break;
                case R.id.btn_delete://参数依次是表名,以及where条件与约束
                    db.delete("person","personid = ?",newString[]{"3"});break;}}}
  • 相关阅读:
    [改善Java代码]在equals中使用getClass进行类型判断
    [改善Java代码]equals应该考虑null值的情景
    [改善Java代码]覆写equals方法时不要识别不出自己
    [改善Java代码] 推荐使用序列化实现对象的拷贝
    [改善Java代码]避免对象的浅拷贝
    [改善Java代码]让工具类不可实例化
    [改善Java代码]建议40:匿名类的构造函数很特殊
    [改善Java代码]使用匿名类的构造函数
    [改善Java代码]使用静态内部类提高封装性
    [改善Java代码]构造函数尽量简化
  • 原文地址:https://www.cnblogs.com/wrx166/p/14911313.html
Copyright © 2020-2023  润新知