Android 存储数据之 SQLite 数据库

SQLite,是一款轻型的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。

它无需其他依赖,完全可以自给自足,所以运用面很广泛,我这里只是给出了一个小例子。

实现:

1、创建一个 SQLite 数据库,创建一个 student 数据表

2、获取数据将数据传入数据库 student 表中

3、查询数据,将数据通过 ListView 将数据展示出来


效果:

获取数据存入 SQLite


查询数据展示



实现详情:

1、创建一个 SQLite 数据库,创建一个 student 数据表

创建一个 SQLite 类,在这里创建数据库、数据表、还有数据插入、查询方法

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

import java.util.Vector;

/**
 * Created by Administrator on 2018/3/22 0022.
 * 在这里创建一个 SQLite 数据库
 */

public class MySQLite  extends SQLiteOpenHelper {

    private static final String DB_NAME = "School.db"; //数据库名称
    private static final int DB_VERSION = 1;                 //版本

    public MySQLite(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        //创建一个 student 数据表 (id、name、sex、age)
        String student = "create table student(" +
                "id integer primary key autoincrement," +
                "name varchar2 not null," +
                "sex varchar2 not null," +
                "age integer not null)";
        db.execSQL(student);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int i, int i1) {

    }

    //插入数据方法
    public void insertStudent(StudentModel sm, SQLiteDatabase db){
        //实例化常量值
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", sm.getName());
        contentValues.put("sex", sm.getSex());
        contentValues.put("age", sm.getAge());
        Log.i("name", sm.getName());
        Log.i("sex", sm.getSex());
        Log.i("age", ""+sm.getAge());
        db.insert("student", null, contentValues);
    }

    //查询数据方法
    public Vector<StudentModel> querys(SQLiteDatabase db){
        //定义一个 Vector<StudentModel>
        Vector<StudentModel> vector = new Vector<StudentModel>();
        StudentModel sm = null;

        //获取查询光标(用 query()方法将所有都查出来)
        Cursor cursor = db.query("student", null, null, null, null, null, null);

        //移动光标到第一个
        if(cursor.moveToFirst()){
            //将数据放入 StudentModel 对象,并放入 vector 集合
            sm = new StudentModel();
            sm.setId(cursor.getInt(cursor.getColumnIndex("id")));
            sm.setName(cursor.getString(cursor.getColumnIndex("name")));
            sm.setSex(cursor.getString(cursor.getColumnIndex("sex")));
            sm.setAge(cursor.getInt(cursor.getColumnIndex("age")));
            vector.add(sm);
            //如果有下一个
            while(cursor.moveToNext()){
                sm = new StudentModel();
                sm.setId(cursor.getInt(cursor.getColumnIndex("id")));
                sm.setName(cursor.getString(cursor.getColumnIndex("name")));
                sm.setSex(cursor.getString(cursor.getColumnIndex("sex")));
                sm.setAge(cursor.getInt(cursor.getColumnIndex("age")));
                vector.add(sm);
            }
        }
        //关闭光标
        cursor.close();
        //返回 StudentModel 对象集合
        return vector;
    }

}

2、获取数据将数据传入数据库 student 表中

传入数据时,我将数据放入了一个model类中

public class StudentModel {

    private int id;         //学生id
    private String name;    //学生姓名
    private String sex;     //学生性别
    private int age;        //学生年龄

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

我们在界面中获取数据,将数据放入 model 类中,通过调用 MySQLite类定义的数据插入方法,将数据保存进数据库

import android.content.Intent;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private EditText name, sex, age;
    private Button submit, search;
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //  获取可读写的数据库;
        db = new  MySQLite(this).getReadableDatabase();

        name = (EditText) findViewById(R.id.name);
        sex = (EditText) findViewById(R.id.sex);
        age = (EditText) findViewById(R.id.age);

        submit = (Button) findViewById(R.id.submit);
        submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //在这里获取输入的数据,调用方法将数据存入 SQLite 的student表中
                StudentModel sm = new StudentModel();
                sm.setName(name.getText().toString());
                sm.setSex(sex.getText().toString());
                sm.setAge(Integer.parseInt(age.getText().toString()));

                MySQLite mySQLite = new MySQLite(MainActivity.this);
                mySQLite.insertStudent(sm, db);
            }
        });

        //点击了查看,就跳转到 Main2Activity 界面展示数据
        search = (Button) findViewById(R.id.search);
        search.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this,Main2Activity.class));
            }
        });

    }
}
 
 

3、查询数据,将数据通过 ListView 将数据展示出来

在这个界面中定义一个 ListView 布局

<ListView
    android:id="@+id/list_item"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</ListView>

调用 SQLite 类中定义的查询方法将数据查询出来(放在集合中,集合里保存 model 类 )

import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.Vector;

public class Main2Activity extends AppCompatActivity {

    private ListView list_item;
    private Vector<StudentModel> vector;
    private StudentModel sm = null;
    private String[] data;
    private SQLiteDatabase db;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        //  获取可读写的数据库;
        db = new  MySQLite(this).getReadableDatabase();

        list_item = (ListView) findViewById(R.id.list_item);

        //查询 SQLite 中的数据
        MySQLite mySQLite = new MySQLite(Main2Activity.this);
        vector = mySQLite.querys(db);
        data = new String[vector.size()];
        for(int i=0;i<vector.size();i++){
            sm = vector.get(i);
            int id = sm.getId();
            String name = sm.getName();
            String sex = sm.getSex();
            int age = sm.getAge();
            data[i] = "id:"+id+" name:"+name+" sex:"+sex+" age:"+age;
        }
        //通过 ListView 展示数据
        list_item.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data));
    }
}


在这里,数据的插入或是数据的展示用的都是最原始的手段,在实际开发中,可以结合需求自己调整

像数据表,可以同时构建多个,增删改查等方法也可以单独写一个类出来,只要灵活运用,就能实现想要的效果


源码:https://github.com/iscopy/SQLite

猜你喜欢

转载自blog.csdn.net/weixin_41454168/article/details/79660554
今日推荐