Android 中数据库的简单使用

来源:互联网 发布:黑马程序员 课程表 编辑:程序博客网 时间:2024/05/01 04:43

Android 中使用的数据库并不是我们经常在web中使用的mySql , 而是一个轻量级、嵌入式的数据库SQLite。下面是简单的使用方法:

一 、创建数据库的管理类

package com.example.guang.lop.vm.helper;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;/** * Created by guang on 2017/1/9. * 这个类是数据库的帮助类,实现数据库的创建和更新 */public class MyDataBaseOpenHelper extends SQLiteOpenHelper{    /*    * 构造方法只用传入一个Context,数据库的名字在这里制定,factory置为null,版本号初始化为1,    * 4.0以前,版本号可以降级,4.0以后,版本号不可以降级    * */    public MyDataBaseOpenHelper(Context context) {        super(context, "mydata.db", null, 1);    }    /*    * 这个方法只有在数据库创建的时候才会执行,即只会执行一次    * 用于数据库的表的初始化    * id 记得前面加_ ,autoincrement中间没有横杠    * */    @Override    public void onCreate(SQLiteDatabase db) {        String sql="create table myinfo (_id integer primary key autoincrement,name varchar(20),age integer,job varchar(128))";        db.execSQL(sql);    }    /**     * 此方法用于数据库的更新,只有在版本号升级的时候才会执行     *     * **/    @Override    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {    }}

二、创建一个实体类

package com.example.guang.lop.model;/** * Created by guang on 2017/1/9. */public class MyUser {    private int id;    private String name;    private int age;    private String job;    public MyUser(){    }    public MyUser(String name,int age,String job){        this.name=name;        this.age=age;        this.job=job;    }    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 int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getJob() {        return job;    }    public void setJob(String job) {        this.job = job;    }}

三、 实现数据库的操作类

package com.example.guang.lop.vm.helper;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import com.example.guang.lop.model.MyUser;/** * Created by guang on 2017/1/9. * 实现数据库增删改查的第一种方法 */public class UserInfoDao {    private final MyDataBaseOpenHelper helper;    public UserInfoDao(Context context){        helper = new MyDataBaseOpenHelper(context);    }    /*实现添加数据的方法*/    public void add(MyUser user){        SQLiteDatabase database=helper.getReadableDatabase();        database.execSQL("insert into myinfo (name,age,job) values(?,?,?)",new Object[]{user.getName(),user.getAge(),user.getJob()});        database.close();    }}

四、实现添加

package com.example.guang.lop.vm.activity;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.example.guang.lop.R;import com.example.guang.lop.model.MyUser;import com.example.guang.lop.vm.helper.MyDataBaseOpenHelper;import com.example.guang.lop.vm.helper.UserInfoDao;public class MyDataBaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_my_data_base);        UserInfoDao userInfoDao = new UserInfoDao(this);        MyUser user=new MyUser("aguang",27,"coder");        userInfoDao.add(user);        MyUser user1=new MyUser("小明",12,"sutdent");        userInfoDao.add(user1);        MyUser use2r=new MyUser("小美",18,"girl");        userInfoDao.add(use2r);        MyUser user3=new MyUser("丽丽",23,"teacher");        userInfoDao.add(user3);    }}

此时,可以把表导出来看看

这里写图片描述

已经成功了。

以上只是简单的实现了添加数据的方法,下面是完整的代码。

数据库的实现方式一:

package com.example.guang.lop.vm.activity;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.example.guang.lop.R;import com.example.guang.lop.model.MyUser;import com.example.guang.lop.vm.helper.MyDataBaseOpenHelper;import com.example.guang.lop.vm.helper.UserInfoDao;public class MyDataBaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_my_data_base);        UserInfoDao userInfoDao = new UserInfoDao(this);       /* //   增加数据        MyUser user=new MyUser("aguang",27,"coder");        userInfoDao.add(user);        MyUser user1=new MyUser("小明",12,"sutdent");        userInfoDao.add(user1);        MyUser use2r=new MyUser("小美",18,"girl");        userInfoDao.add(use2r);        MyUser user3=new MyUser("丽丽",23,"teacher");        userInfoDao.add(user3);*/        //删除数据        /*String name="aguang";        userInfoDao.delete(name);*/        //修改数据        /*MyUser user4=new MyUser("小美",22,"girl");        userInfoDao.update(user4);*/        //查询数据//        MyUser user=new MyUser("aguang",27,"coder");//        userInfoDao.add(user);        userInfoDao.query(0);    }}
package com.example.guang.lop.vm.helper;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.guang.lop.model.MyUser;import com.orhanobut.logger.Logger;/** * Created by guang on 2017/1/9. * 实现数据库增删改查的第一种方法 */public class UserInfoDao {    private final MyDataBaseOpenHelper helper;    public UserInfoDao(Context context){        helper = new MyDataBaseOpenHelper(context);    }    /*实现添加数据的方法*/    public void add(MyUser user){        SQLiteDatabase database=helper.getReadableDatabase();        database.execSQL("insert into myinfo (name,age,job) values(?,?,?)",new Object[]{user.getName(),user.getAge(),user.getJob()});        database.close();    }    /*实现数据删除的方法*/    public void delete(String name){        SQLiteDatabase database=helper.getReadableDatabase();        database.execSQL("delete from myinfo where name=?",new Object[]{name});        database.close();    }    /*实现数据修改的方法*/    public void update(MyUser user){        SQLiteDatabase database=helper.getReadableDatabase();        database.execSQL("update myinfo set age =? where name=?",new Object[]{user.getAge(),user.getName()});        database.close();    }    /*实现数据查询的方法*/    public void query(int age){        SQLiteDatabase database=helper.getReadableDatabase();        Cursor cursor=database.rawQuery("select name,age,job from myinfo where age>?",new String[]{"0"});        if(cursor !=null && cursor.getCount()>0){            while(cursor.moveToNext()){                String userName=cursor.getString(cursor.getColumnIndex("name"));                int userAge=cursor.getInt(cursor.getColumnIndex("age"));                String userJob=cursor.getString(cursor.getColumnIndex("job"));                Logger.d(userName+"--"+userAge+"--"+userJob);            }        }        cursor.close();        database.close();    }}

第一种方式的缺点就是没有返回值,无法知道操作是否成功

第二种数据库的操作方式:

package com.example.guang.lop.vm.helper;import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.example.guang.lop.model.MyUser;import com.orhanobut.logger.Logger;import java.util.ArrayList;import java.util.List;/** * Created by guang on 2017/1/9. */public class UserInfoDao2 {    private final MyDataBaseOpenHelper helper;    public UserInfoDao2(Context context){        helper = new MyDataBaseOpenHelper(context);    }    /**     * 增加数据     * **/    public boolean add(MyUser user){        SQLiteDatabase database=helper.getReadableDatabase();        ContentValues values=new ContentValues();        values.put("name",user.getName());        values.put("age",user.getAge());        values.put("job",user.getJob());        long res=database.insert("myinfo",null,values);        database.close();        if(res==-1){            return false;        }else{            return true;        }    }    /*删除数据*/    public int delelte(String name){        SQLiteDatabase database=helper.getReadableDatabase();        int res=database.delete("myinfo","name=?",new String[]{name});        database.close();        return res;    }    /**     *修改数据     * **/    public int update(MyUser user){        SQLiteDatabase database = helper.getReadableDatabase();        ContentValues values = new ContentValues();        values.put("age",88);        int res = database.update("myinfo",values,"name=?",new String[]{user.getName()});        database.close();        return res;    }    /*查询数据*/    public ArrayList<MyUser> select(){        ArrayList<MyUser> mArrayList=new ArrayList<MyUser>();        SQLiteDatabase database = helper.getReadableDatabase();        Cursor cursor = database.query("myinfo",new String[]{"name","age","job"},null,null,null,null,null);        if(cursor != null && cursor.getCount()>0){            while(cursor.moveToNext()){                String name = cursor.getString(cursor.getColumnIndex("name"));                int age = cursor.getInt(cursor.getColumnIndex("age"));                String job=cursor.getString(cursor.getColumnIndex("job"));                MyUser user = new MyUser(name,age,job);                mArrayList.add(user);            }        }        cursor.close();        database.close();        return mArrayList;    }}
package com.example.guang.lop.vm.activity;import android.database.sqlite.SQLiteDatabase;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.example.guang.lop.R;import com.example.guang.lop.model.MyUser;import com.example.guang.lop.vm.helper.MyDataBaseOpenHelper;import com.example.guang.lop.vm.helper.UserInfoDao;import com.example.guang.lop.vm.helper.UserInfoDao2;import com.orhanobut.logger.Logger;import java.util.ArrayList;public class MyDataBaseActivity extends AppCompatActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_my_data_base);        UserInfoDao2 userInfoDao2=new UserInfoDao2(this);        //添加数据       /* MyUser user1 = new MyUser("a001",22,"pilot");        MyUser user2 = new MyUser("a002",11,"printer");        MyUser user3 = new MyUser("a003",15,"worker");        MyUser user4 = new MyUser("a004",34,"CEO");        MyUser user5 = new MyUser("a006",22,"king");        userInfoDao2.add(user1);        userInfoDao2.add(user2);        userInfoDao2.add(user3);        boolean isOK=userInfoDao2.add(user5);        if(isOK){            Logger.d("success");        }else{            Logger.d("not success");        }*/        //删除数据       /* int res=userInfoDao2.delelte("a001");        Logger.d("res: "+res);*/        //修改数据       /* MyUser user5 = new MyUser("a006",22,"king");        int resUpdate=userInfoDao2.update(user5);        Logger.d(resUpdate);*/        //查询数据        ArrayList<MyUser> mResult = userInfoDao2.select();        Logger.d(mResult.size());    }}

getReadableDatabase() 和 getWritableDatabase()的区别:
后者以只写方式打开数据库,如果磁盘满了,就报错;而前者先以写得方式打开数据库,如果磁盘满了,就以只读的方式打开。


数据库的事物

 database.beginTransaction();        try{            //要执行的代码            database.setTransactionSuccessful();        }finally {            database.endTransaction();        }
0 0
原创粉丝点击