为了账号安全,请及时绑定邮箱和手机立即绑定

Android开发之读取数据库(SQLiteOpenHelper)

标签:
Android

SQLite数据库

  • 相信大家都用过Excel吧,我们在管理一些比较复杂的数据时就会使用它。比如统计一个班的学生信息,我们一般会在第一行输入学生姓名、班级、学号等字段来构成一个学生的完整信息。例如:


    webp

    学生信息

  • 同样,我们在使用手机的时候也会产生大量数据要进行管理,比如在信息会话中,不同的联系人包含不同的短信内容以及对应的联系人。那我们如何管理这些数据呢?毫无疑问,通过数据库来管理。

  • SQLite数据库就是这样一个内置在Android中的轻量级的关系型数据库,它支持标准的SQL语法,并且只占用极少的内存。

  • 接下来我们将使用自己定义的MyDatabaseHelper类继承自SQLiteOpenHelper来实现我们的App。

读取数据库文件

  • 我们将完成一个拥有以下功能的App:

  1. 从一个已经写好的数据库(里面包含一些学生信息)读取学生的基本信息。

  2. 点击获取按钮,将读取出来的信息在ListView控件中展示。

  • 编写布局代码(代码最后给出),实现效果如下:


    webp

    主页面

  • 创建一个数据库辅助类,用于做数据库操作。代码如下:

public class MyDatabaseHelper extends SQLiteOpenHelper {    public MyDatabaseHelper (Context context, String name, int version) {        super(context, name, version);
    }    @Override
    public void onCreate(SQLiteDatabase db) {        //创建sql语句,新建表
        String sqlCommand1 = "create table student(_id integer primary key, name varchar(255), age integer)";        //执行sql语句
        db.execSQL(sqlCommand1);
    }    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        // TODO Auto-generated method stub
    }
}
补充
  1. MyDatabaseHelper是一个继承自SQLiteOpenHelper的Java类,它需要重写父类的onCreate()和onUpgrade()方法。该类的构造函数,也就是MyDatabaseHelper()用来初始化数据库连接。当数据表第一次被创建时,onCreate()方法将被触发,在该方法中实现数据表的创建。当数据库需要升级时,onUpgrade()方法将被触发,该方法实现数据库更新。

  • 在主活动onCreate()方法中,初始化ListView,创建数组适配器,并在按钮响应函数中编写数据库读取的代码。代码如下:

public class MainActivity extends AppCompatActivity {
    ArrayAdapter<String> adapter;    private MyDatabaseHelper dbHelper;
    Button button;    @Override
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button)findViewById(R.id.button1);        //创建MyDatabaseHelper对象
        dbHelper = new MyDatabaseHelper(this, "test.db", 1);
        adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1);
        ListView listView = (ListView)findViewById(R.id.list1);
        listView.setAdapter(adapter);
        button.setOnClickListener(new View.OnClickListener() {            @Override
            public void onClick(View view) {                //通过SQLiteDatabase返回的对象对数据库进行操作
                //getWritableDatabase()方法创建或打开一个可读数据库
                SQLiteDatabase db = dbHelper.getWritableDatabase();                //查询student表中所有数据
                //查询到的数据都将从Cursor对象取出
                Cursor cursor = db.query(false, "student", null, null, null ,null, null, null, null);                if (cursor.moveToFirst()){//遍历对象
                    do {                        //向适配器中添加数据
                        adapter.add(cursor.getString(cursor.getColumnIndex("name")));
                        adapter.add(cursor.getString(cursor.getColumnIndex("no")));
                    }while (cursor.moveToNext());
                }
                cursor.close();
            }
        });
    }
}
补充
  • dbHelper = new MyDatabaseHelper(this, "test.db", 1)创建MyDatabaseHelper对象时需在其中传入Context(this)、数据库文件名字(test.db)、数据库版本(1)。这里我们已经传入一个写好的数据库文件,当系统发现已经有数据库了,就不会调用MyDatabaseHelper中的onCreate()函数,所以这两句代码就不会执行。
    String sqlCommand1 = "create table student(_id integer primary key, name varchar(255), age integer)";
    db.execSQL(sqlCommand1);
    写在这里是为了熟悉相关数据库操作方法。

  • 我们如何将数据库文件传入虚拟机中呢?需在Android Studio(3.2)打开Device File Explorer,上传test.db文件/data/data/com.example.datastoredemo/databases中。

  • SQLiteDatabase db = dbHelper.getWritableDatabase()getWritableDatabase()方法会创建或打开一个可读数据库。

  • Cursor cursor = db.query(false, "student", null, null, null ,null, null, null, null)Cursor类是数据每行的集合,db.query()方法中所含参数非常多(大家可以自行搜索一下),这里我们查询数据库中"student"表,并把查询到的数据返回给cursor便于后续操作。

  • cursor.moveToFirst()将记录指针移动到第一行,如有数据则执行下面的方法。

  • cursor.moveToNext()将记录指针移动到下一行,判断还有无数据。

实际效果

  • 添加数据前:


    webp

    添加数据前

  • 点击添加按钮:


    webp

    点击按钮



作者:没想好昵称呵
链接:https://www.jianshu.com/p/682203c44bf4



点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消