博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android数据存储--数据库的操作
阅读量:5909 次
发布时间:2019-06-19

本文共 5546 字,大约阅读时间需要 18 分钟。

2017-4-28数据存储--数据库的操作

作业要求:

a) 将学生信息存入数据库

b) 显示所有学生信息列表

c) 删除数据库表中第一条信息。

关于数据库操作,因为是刚刚接触,对于整个操作流程其实并不是特别清晰,所以写代码的时候只能是写一步看一步,用到什么就写什么,所以对于数据库的操作流程这里就不进行分析了。
直接看代码吧,先是布局文件,很简单,就不进行解释了。先是MainActivity的布局文件,只有一个EditorView,两个Button,和一个ListView:

然后对ListView写了一个简单的用来显示的布局文件:

然后肯定要有一个主类,按照业务逻辑分析,需要有专门用来操作数据库的类,android里的数据库有时候需要程序来创建,所以还有有一个类来创建库以及打开数据库,所以就这样产生了三个类:MainActivity(主类)、MyDBHelperl类(创建、打开数据库)、PersonerDAO类(操作数据库),还有一个自定义的Adapter用来解析cursor类型的数据MyCursorAdapter继承自CursonAdapter类。下面看代码:

MainActivity(主类):

package com.example.a15083.sqliteoperate;import android.database.Cursor;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.EditText;import android.widget.ListView;public class MainActivity extends AppCompatActivity {    private EditText et_input;    private ListView lv_data;    private MyCursorAdapter myCursorAdapter;    private PersonDAO personDAO;    private Cursor cursor;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        et_input = (EditText)findViewById(R.id.et_input);        lv_data = (ListView)findViewById(R.id.lv_data);        //在程序刚运行时就去数据库中查询数据,并进行显示,如果数据库不存在则创建数据库        personDAO = new PersonDAO(this);        cursor = personDAO.selectAll();        if(cursor!=null){            myCursorAdapter = new MyCursorAdapter(MainActivity.this,cursor);            lv_data.setAdapter(myCursorAdapter);        }    }    public void onClick(View view) {        switch(view.getId()){            case R.id.bt_add:            //获取编辑框中的内容插入数据库                String name = et_input.getText().toString();                personDAO.insert(name);                cursor = personDAO.selectAll();                if(cursor!=null){                    myCursorAdapter = new MyCursorAdapter(this,cursor);                    lv_data.setAdapter(myCursorAdapter);                }                break;            case R.id.bt_delete:            //删除数据库中的第一条数据                if(cursor!=null){                    if(cursor.moveToFirst()){                        personDAO.delete(cursor.getString(cursor.getColumnIndex("_id")));                        cursor = personDAO.selectAll();                    }                }                myCursorAdapter = new MyCursorAdapter(this,cursor);                lv_data.setAdapter(myCursorAdapter);                break;        }    }}

MyDBHelperl类(创建、打开数据库):  

package com.example.a15083.sqliteoperate;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by 15083 on 2017/5/15 0015. */public class MyDBHelper extends SQLiteOpenHelper {    private String sql = "create table person(id integer primary key autoincrement,name txt)";    //这个是用来在数据库中创建表和库用的    public MyDBHelper(Context context) {    //使用父类方法创建数据库,库名为:personInfo        super(context,"personInfo",null,1);    }    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {        sqLiteDatabase.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {        sqLiteDatabase.execSQL("drop table if exists person");        onCreate(sqLiteDatabase);    }}

PersonerDAO类(操作数据库):

package com.example.a15083.sqliteoperate;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;/** * Created by 15083 on 2017/5/15 0015. */public class PersonDAO {//这里的定义的的这个类用来管理对数据库的各种操作    private MyDBHelper dbHelper;    private SQLiteDatabase sqLiteDatabase;    public PersonDAO(Context context){        dbHelper = new MyDBHelper(context);    }//向数据库中插入数据    public void insert(String name){        sqLiteDatabase = dbHelper.getWritableDatabase();        String sql = "insert into person(name) values('"+name+"')";        sqLiteDatabase.execSQL(sql);    }//查询数据库中的所有数据,并返回一个 Cursor类型的数据    public Cursor selectAll() {        sqLiteDatabase = dbHelper.getReadableDatabase();        Cursor cursor = sqLiteDatabase.query("person", null, null, null, null, null, null);        return cursor;    }//删除数据库中的某一条数据    public void delete(String id){        sqLiteDatabase = dbHelper.getWritableDatabase();        String sql = "delete from person where _id="+String.valueOf(id);//"delete from student where _id="+id        sqLiteDatabase.execSQL(sql);    }}

MyCursorAdapter:

package com.example.a15083.sqliteoperate;import android.content.Context;import android.database.Cursor;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.CursorAdapter;import android.widget.TextView;/** * Created by 15083 on 2017/5/15 0015. */public class MyCursorAdapter extends CursorAdapter {//自定义Adapter,并且继承自CursorAdapter,用来用自定义的方式处理这个程序中类型为cursor的值    public MyCursorAdapter(Context context, Cursor cursor) {        super(context, cursor, 0);    }    @Override    public View newView(Context context, Cursor cursor, ViewGroup viewGroup) {        return LayoutInflater.from(context).inflate(R.layout.item,viewGroup,false);    }    @Override    public void bindView(View view, Context context, Cursor cursor) {        TextView name = (TextView) view.findViewById(R.id.tv_name);        name.setText(cursor.getString(cursor.getColumnIndex("name")));    }}

所有的代码就是这样,我对整个业务逻辑的理解有点混乱,以后会理解的越来越好的!

附上程序运行图:
1126725-20170516143520900-1938689169.png
1126725-20170516143543463-675997974.png

转载于:https://www.cnblogs.com/wang-Jeft/p/6861263.html

你可能感兴趣的文章
7.JS之深浅拷贝
查看>>
Swoole 源码分析——Server模块之TaskWorker事件循环
查看>>
Slog63_项目上线之ArthurSlog个人网站上线2
查看>>
bat批处理简介:Windows自动化之道
查看>>
Python之路--python基础2
查看>>
帆软入门与报表设计
查看>>
【Golang 基础】Go 语言简介
查看>>
数组循环删除的问题
查看>>
聊聊openmessaging的MessagingAccessPoint
查看>>
周锦民:腾讯在线教育视频互动直播间技术实践
查看>>
iOS 视频播放器-模块化您的控制层
查看>>
Java 10 实战第 1 篇:局部变量类型推断
查看>>
vue中的computed属性
查看>>
localstorage浏览器储存
查看>>
dubbo服务引用一之客户端配置
查看>>
一篇深度学习论文背后的大规模在线协作
查看>>
从司法领域看阿里云产业AI策略:生态联盟,技术赋能
查看>>
django搭建一个小型的服务器运维网站-用户登陆与session
查看>>
Spring入门看这一篇就够了
查看>>
如何使用Git将本地项目上传到Github(win10系统)
查看>>