Android 中数据库的简单使用

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值