知识点: SQLite的使用。 GreenDao框架的使用

1. SQLlite数据库 简介

示意图


2. SQLiteOpenHelper类

2.1 简介

示意图

2.2 SQLiteOpenHelper类 常用方法

/**   *  创建数据库  */  // 1. 创建 or 打开 可读/写的数据库(通过 返回的SQLiteDatabase对象 进行操作) getWritableDatabase() // 2. 创建 or 打开 可读的数据库(通过 返回的SQLiteDatabase对象 进行操作) getReadableDatabase() // 3. 数据库第1次创建时 则会调用,即 第1次调用 getWritableDatabase() / getReadableDatabase()时调用 // 在继承SQLiteOpenHelper类的子类中复写 onCreate(SQLiteDatabase db)  // 4. 数据库升级时自动调用 // 在继承SQLiteOpenHelper类的子类中复写 onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) // 5. 关闭数据库 close() /**   *  数据库操作(增、删、减、查)  */  // 1. 查询数据 (Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)   // 查询指定的数据表返回一个带游标的数据集。 // 各参数说明:  // table:表名称  // colums:列名称数组  // selection:条件子句,相当于where  // selectionArgs:条件语句的参数数组  // groupBy:分组  // having:分组条件  // orderBy:排序类  // limit:分页查询的限制  // Cursor:返回值,相当于结果集ResultSet  (Cursor) rawQuery(String sql, String[] selectionArgs)  //运行一个预置的SQL语句,返回带游标的数据集(与上面的语句最大的区别 = 防止SQL注入) // 2. 删除数据行   (int) delete(String table,String whereClause,String[] whereArgs)   // 3. 添加数据行  (long) insert(String table,String nullColumnHack,ContentValues values)   // 4. 更新数据行 (int) update(String table, ContentValues values, String whereClause, String[] whereArgs)   // 5. 执行一个SQL语句,可以是一个select or 其他sql语句  // 即 直接使用String类型传入sql语句 & 执行 (void) execSQL(String sql) 

3. 具体使用

创建一个继 承 SQLiteOpenHelp 的自定义的UserHelper

//原始的SQLite   openHelperpublic class UserHelper extends SQLiteOpenHelper {    public static String NAME="myuser";    public static int VERSION=1;    private static UserHelper instance;    String sql="create table MYUSER"//表名称            +"(id Long , "//ID            +"name text,"//名称            +"age integer)";//序号    public synchronized static UserHelper getInstance(Context context){        if(instance==null){            instance=new UserHelper(context);        }        return instance;    }    public  UserHelper(Context context){        super(context,NAME,null,VERSION);    }    @Override    public void onCreate(SQLiteDatabase sqLiteDatabase) {        sqLiteDatabase.execSQL("drop table if exists MYUSER");        sqLiteDatabase.execSQL(sql);    }    @Override    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {        sqLiteDatabase.execSQL("drop table if exists MYUSER");        sqLiteDatabase.execSQL(sql);    }}主要在构造器把数据库名称和版本传入 重写onCreate()方法,onCreate的调用会在getWritableDatabase()、getReadableDatabase()调用时候进入。onCreate里主要去创建你需要的表,onUpgrade()是在数据库版本改变时候会调用。(一般数据库升级会把已存在的表删除新建一张表。)

第二部是建一个dao类来实现增删改查功能,dao主要对数据库调用的一个方法的封装。用于外部调用

 

import java.util.ArrayList;import java.util.List;//原始Sqlite daopublic class UserEntityDao {    public UserHelper userHelper;    public static SQLiteDatabase db;    HandlerThread thread=new HandlerThread("userdao");    public UserEntityDao(Context context){        userHelper=UserHelper.getInstance(context);//对openhelper的创建并且应用        db=userHelper.getWritableDatabase();//对数据库的创建    }    public void closeDb(){        if(db!=null&&db.isOpen()){            db.close();        }    }    public void  closeCursor(Cursor cursor){        if(cursor!=null&&!cursor.isClosed()){            cursor.close();            cursor=null;        }    }    public boolean insertUser(List list){//插入方法开启对数据库的插入操作        db=userHelper.getWritableDatabase();        boolean issuccess = false;        db.beginTransaction();        try{            for(UserEntity userEntity:list){                Object[] objects={userEntity.getId(),userEntity.getName(),userEntity.getAge()};                db.execSQL("insert into myuser(id,name,age) values (?,?,?)",objects);            }            issuccess=true;        }catch (Exception e){            issuccess=false;        }        db.setTransactionSuccessful();        db.endTransaction();        closeDb();        return issuccess;    }    public  List queryUser(){//开启对数据库的查询操作        db=userHelper.getWritableDatabase();        List list=new ArrayList<>();        db.beginTransaction();        Cursor cursor=db.rawQuery("select * from myuser",null);        while (cursor.moveToNext()){            UserEntity userEntity=new UserEntity();            userEntity.setId(cursor.getLong(cursor.getColumnIndex("id")));            userEntity.setAge(cursor.getInt(cursor.getColumnIndex("age")));            userEntity.setName(cursor.getString(cursor.getColumnIndex("name")));            list.add(userEntity);        }        db.endTransaction();        closeCursor(cursor);        closeDb();        return   list;    }}

 在ACtivity调用

        userDao=new UserEntityDao(MainActivity.this);//对dao的创建         List result=userDao.queryUser();对dao实现的方法调用来操作数据库               

 二 GreenDao的使用

一、GreenDao数据库的使用

第一步: 在项目的.gradle文件里面添加

buildscript {   repositories {   jcenter()   mavenCentral() } dependencies {    classpath 'com.android.tools.build:gradle:2.3.3'    classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0' }}  

第二步:在moddle的.gradle文件里面添加

android {greendao {   schemaVersion 1   daoPackage 'com.jyjt.ydyl.greendao.gen'   targetGenDir 'src/main/java'  }}  

依赖里面添加

compile 'org.greenrobot:greendao:3.1.0'compile 'org.greenrobot:greendao-generator:3.1.0'

第三步: 添加Bean类,用User举例子 , 一定要记得注解@Entity 如:

package com.example.tnsap10.sqliteorgeendaodemo.entity;import org.greenrobot.greendao.annotation.Entity;import org.greenrobot.greendao.annotation.Id;import java.io.Serializable;import org.greenrobot.greendao.annotation.Generated;@Entitypublic class User implements Serializable {    static final long serialVersionUID = 49L;//解决GreenDao Serializable出错    @Id(autoincrement=true)    private Long id;    private String  name;    private int  age;   }

第四步:编译项目,PhoneContactsEntity实体类会自动编译,生成get、set方法并且会在com.jyjt.ydyl.greendao.gen目录下生成三个文件;

 

 

在Activity中使用

public class MainActivity extends AppCompatActivity implements View.OnClickListener{    UserEntityDao userDao;// 原始sqlite    Button inseruser,queryuser;    List list;    DaoMaster.DevOpenHelper helper;//geeenDao框架内的    DaoMaster daoMaster;//geeenDao框架内的    DaoSession daoSession;//geeenDao框架内的    UserDao myuserDao;//geeenDao框架内的    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        inseruser=findViewById(R.id.insertuser);        queryuser=findViewById(R.id.queryuser);        inseruser.setOnClickListener(this);        queryuser.setOnClickListener(this);        list=new ArrayList<>();        list.add(new UserEntity(1l,"LIlei",23));        HandlerThread thread=new HandlerThread("myuser"){            @Override            public void run() {               /*  userDao=new UserEntityDao(MainActivity.this);//原始的Sqlite               */                helper= new DaoMaster.DevOpenHelper(MainActivity.this,"user-db",null);                daoMaster=new DaoMaster(helper.getWritableDatabase());                daoSession=daoMaster.newSession();                myuserDao=daoSession.getUserDao();//geeenDao框架            }        };        thread.start();    }    @Override    public void onClick(View view) {        switch (view.getId()){            case R.id.insertuser:                new Thread("inser"){                    @Override                    public void run() {                        super.run();                      /*  boolean b = userDao.insertUser(list);                        if(b){                            Log.d("MainActivity","插入数据成功");                        }else{                            Log.d("MainActivity","插入数据失败");                        }*/                        User user=new User(null,"Hanmeimei",23);                        myuserDao.insert(user);//geeenDao框架                        Log.d("MainActivity","插入数据成功");                    }                }.start();                break;            case R.id.queryuser:                new Thread("query"){                    @Override                    public void run() {                        super.run();                       /* List result=userDao.queryUser();                        for(UserEntity u:result){                            Log.d("MainActivity","userEntity id:"+u.getId()+"name:"+u.getName()+"age:"+u.getAge()); //原始Sqlite                        }*/                        List result= myuserDao.queryBuilder().build().list();                        for(User u:result){                            Log.d("MainActivity","userEntity id:"+u.getId()+"name:"+u.getName()+"age:"+u.getAge());                        }//geeenDao框架                    }                }.start();                break;        }    }}

以上就完成了greenDao的简单使用

 

 

更多相关文章

  1. 一句话锁定MySQL数据占用元凶
  2. Android(安卓)Intent设置类型setType();
  3. Android———利用JDBC连接服务器数据库
  4. Android之调用本地摄像头
  5. vnc 项目的几点总结
  6. Android(安卓)学习之Camera拍照流程
  7. 安卓集成友盟调用微信登录时的问题
  8. Android本地存储数据方法(超简单)
  9. Android(安卓)SurfaceFlinger 学习之路(七)----创建图形缓冲区Gr

随机推荐

  1. android 限定 EditText字符输入个数
  2. Android(安卓)handler用法详解二(例2)
  3. android 使用vcard示例
  4. android字体闪烁动画(线程)
  5. Android中Message机制的灵活应用
  6. Android外接扫码枪监听普通输入事件
  7. android中去掉标题栏和状态栏
  8. Android(安卓)- 对话框(Dialog)和通知(No
  9. android 多媒体部分学习笔记十--简单视频
  10. android 让 webview 支持HTML中的