Android官方Training学习——在SQL数据库中保存数据

来源:互联网 发布:手机天气预报软件排行 编辑:程序博客网 时间:2024/06/15 05:46

在官方文档的培训教程中看到了SQL一章,看了一下午没怎么懂,于是晚上找了一些前辈的实例来学习,大致明白了SQL在Android当中的使用。


1.建立契约类(Contract)

契约类的作用是为数据库定型,包含了数据库具体的操作语句和表的定义一些静态字段。

定义一个内部类,存储表名和表结构。

public class MySQLiteContract {    private static final String TEXT_TYPE = " TEXT";                //保存一些类型的字符串    private static final String INTEGER_TYPE = " INTEGER";    private static final String COMMA_SEP = ",";    public static final String SQL_CREATE_ENTRIES =//保存SQL的操作语句            "CREATE TABLE IF NOT EXISTS " + MyStudentEntry.TABLE_NAME + " (" +                    MyStudentEntry._ID + " INTEGER PRIMARY KEY," +                    MyStudentEntry.COLUMN_NAME + TEXT_TYPE + COMMA_SEP +                    MyStudentEntry.COLUMN_AGE + INTEGER_TYPE + " )";    public static final String SQL_DELETE_ENTRIES =            "DROP TABLE IF EXISTS " + MyStudentEntry.TABLE_NAME;    public static final String SQL_QUERY_ENRIES =            "SELECT * FROM " + MyStudentEntry.TABLE_NAME;    public class MyStudentEntry implements BaseColumns {//内部类,存储表名和表结构        public static final String _ID = "_id";        public static final String TABLE_NAME = "student";//表的列名  必须小写        public static final String COLUMN_NAME = "name";        public static final String COLUMN_AGE = "age";    }}

2.定义一个Helper 继承 SQLiteOpenHelper

· 这个类有两个方法:
OnCreate(SQLitedatabase db):  生成数据库时自动调用,在内部做一些表的初始化操作。

OnUpgrade(SQLiteDatabase db, int oldVersion, int newVersion): 更新时操作,更改表结构(增删列)时调用,更改时需要更新版本号。
public class MySQLiteDBHelper extends SQLiteOpenHelper {    private static final String DATABASE_NAME = "students.db";//数据库文件名    private static final int DATABASE_VERSION = 1;//数据库版本号    public MySQLiteDBHelper(Context context){        super(context,DATABASE_NAME,null,DATABASE_VERSION);    }    @Override    public void onCreate(SQLiteDatabase db) {        db.execSQL(MySQLiteContract.SQL_CREATE_ENTRIES);    }    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {        db.execSQL(MySQLiteContract.SQL_DELETE_ENTRIES);        onCreate(db);    }}


3.定义类型

定义自己的类,以便数据库对象和实体对象互相转换。
public class Student {    public int _id;    public String name;    public int age;    public Student(){}    public Student(String name, int age) {        this.name = name;        this.age = age;    }}

4.定义数据库管理类

这个类实现了一些具体的操作方法,如在表中增删对象,查询表中的内容等等,也负责数据库对象到实体对象的转换。
public class MySQLiteManager {    private MySQLiteDBHelper helper;//声明一个Helper类    private SQLiteDatabase db;//数据库类,由helper类得到    MySQLiteManager(Context context){        helper = new MySQLiteDBHelper(context);        db = helper.getWritableDatabase();//得到数据库类    }    public void add(List<Student> mStudents) {//增加数据        for(int i = 0; i < mStudents.size() ; i++){            ContentValues values = new ContentValues();            Student student = mStudents.get(i);            values.put(MySQLiteContract.MyStudentEntry.COLUMN_NAME,student.name);            values.put(MySQLiteContract.MyStudentEntry.COLUMN_AGE,student.age);            db.insert(MySQLiteContract.MyStudentEntry.TABLE_NAME,null,values);        }    }    public List<Student> query() {//查询数据库内容        ArrayList<Student> students = new ArrayList<>();        Cursor c = db.rawQuery(MySQLiteContract.SQL_QUERY_ENRIES,null);        while(c.moveToNext()){            Student student = new Student();            student._id = c.getInt(c.getColumnIndex("_id"));            student.name = c.getString(c.getColumnIndex("name"));            student.age = c.getInt(c.getColumnIndex(MySQLiteContract.MyStudentEntry.COLUMN_AGE));            students.add(student);        }        c.close();        return students;    }    public void updateAge(Student student) {//更新年龄        ContentValues cv = new ContentValues();        cv.put(MySQLiteContract.MyStudentEntry.COLUMN_AGE , student.age);        db.update(MySQLiteContract.MyStudentEntry.TABLE_NAME,cv,"name = ?",new String[]{student.name });    }    public void deleteOldStudent(Student student1) {//删除数据        db.delete(MySQLiteContract.MyStudentEntry.TABLE_NAME,"age >= ?",new String[]{String.valueOf(student1.age)});    }}

5.与界面结合

剩余的就是在Activity或者Fragment中new一个上面定义的Manager类型,然后调用里边的方法来进行数据库的读写了。



学艺不精先记录一下,可能会有一些错误存在, 请多包涵,哪里不对欢迎大家指正,谢谢!

0 0