进行安卓开发少不了要跟数据库打交道。然而谷歌为我们提供的数据库操作类SQLiteHelper生涩难懂,尤其是要求熟练SQL语句。

java是一门面向对象语言,使用面向对象的思想管理数据库无疑更加合适。

1、下载Jar包

  • 可以去官网下载core以及android Jar包
  • 也可以去我上传的地址下载

注意是俩个jar包哦

2、配置JavaBen

这里的javaben对应的就是数据库表里面的具体数据。国际惯例,先上代码:

//表名DatabaseTable(tableName = "tb_user")public class User {    /** * id列的列名 */    public static final String COLUMN_NAME_ID = "id";    //表示id    @DatabaseField(id = true) private String id;    @DatabaseField(useGetSet = true) private String name;    @DatabaseField(columnName="age") private int mAge;    @DatabaseField(defaultValue="男") private String sex;    public User()    {    }    public User(String id, String name, int age)    {        super();        this.id = id;        this.name = name;        this.mAge = age;    }    public String getId()    {        return id;    }    public void setId(String id)    {        this.id = id;    }    public String getName()    {        return name;    }    public void setName(String name)    {        this.name = name;    }    public int getmAge()    {        return mAge;    }    public void setmAge(int mAge)    {        this.mAge = mAge;    }    public String getSex()    {        return sex;    }    public void setSex(String sex)    {        this.sex = sex;    }    @Override    public String toString()    {        return "id=" + id + ", name=" + name + ", age=" + mAge + ", sex=" + sex + "\n";    }}

注意:需要一个无参构造
其中代码与普通的javaben无多大区别,主要是注解。

3、注解含义

  1. 在类的申明第一行上面加上:
    • @DatabaseTable(tableName = "tb_user")
  2. Field注释,包含以下几种字段定义 :
    • @DatabaseField

columnName
指定列名,不指定的话默认使用变量名

     @DatabaseField(columnName="age") private String mAge;

defaultValue
指设置该列默认值

@DatabaseField(defaultValue="男") private String sex;

id
作为数据库的id存在(id、generatedId、generatedIdSequence只能同时存在一个)

      @DatabaseField(id = true) private String id;  

generatedId
自增长id(id、generatedId、generatedIdSequence只能同时存在一个)

generatedId
序列编号的名字(可理解为id,但是特殊指定columnName的值)

useGetSet
是否使用get set方法进行映射,为true时表示使用get set方法,
建议设置为true,可以提升性能

@DatabaseField(useGetSet = true) private String name;

4、OrmLiteSqliteOpenHelper子类的创建

具体用法注释已经写的很清楚了,这里就不再详细说明,主要重写俩个方法

onCreate(SQLiteDatabase dataClass, ConnectionSource source)
onUpgrade(SQLiteDatabase database, ConnectionSource source, int olderVersion,
int newVersion)

public class DatabaseHelper extends OrmLiteSqliteOpenHelper {    //数据库名    private static final String TABLE_NAME = "user_tab";    //版本号    private static final int TABLE_VERSION = 1;    //dao操作类,每一张表对应一个    private Dao<User, String> mUserDao;    private DatabaseHelper(Context context)    {        //参数与原生的类似        super(context, TABLE_NAME, null, TABLE_VERSION);    }    //数据库创建时执行的方法    @Override    public void onCreate(SQLiteDatabase dataClass, ConnectionSource source)    {        try        {            //创建表            TableUtils.createTable(source, User.class);        } catch (SQLException e)        {            e.printStackTrace();        }    }    //版本变更执行的方法    @Override    public void onUpgrade(SQLiteDatabase database, ConnectionSource source, int olderVersion,            int newVersion)    {        try        {            //新增、变更、删除表操作            TableUtils.dropTable(source, User.class, true);        } catch (SQLException e)        {            e.printStackTrace();        }    }    private static DatabaseHelper mDatabaseHelper;    //获取单例    public static DatabaseHelper getInstance(Context context)    {        if (mDatabaseHelper == null )        {            synchronized (DatabaseHelper.class)            {                if (mDatabaseHelper == null)                {                    mDatabaseHelper = new DatabaseHelper(context);                }            }        }        return mDatabaseHelper;    }    public Dao<User, String> getUserDao()    {        if (mUserDao == null)        {            try            {                mUserDao = getDao(User.class);            } catch (SQLException e)            {                e.printStackTrace();            }        }        return mUserDao;    }    //释放资源    @Override    public void close()    {        super.close();        mUserDao = null;        mDatabaseHelper.close();        mDatabaseHelper = null;    }}

5、创建数据库操作Dao类

Dao主要用于对数据库的操作,可以避免直接通过help来进行相关,实现功能拆分。这样做符合设计模式中的单一职责原则。ORMLite的功能是非常强大的,可以让开发人员方便的进行数据库的增删查改,提高开发效率,减少开发难度。
public class UserDao {    protected Dao<User, Object> mDao;    protected DatabaseHelper mHelper;    public UserDao(Context context)    {        getDao(context);    }    private void getDao(Context context)    {        mHelper = DatabaseHelper.getInstance(context);        try        {            mDao = mHelper.getDao(User.class);        } catch (SQLException e)        {            e.printStackTrace();        }    }    /** * 添加集合中的数据到数据库 * @date 2016-4-14 下午6:45:05 * @param list 需要插入的数据列表 */    public void add(List<User> list)    {        if (list == null || list.isEmpty())        {            return;        }        for (User item : list)        {            add(item);        }    }    /** * 添加一个数据 * @date 2016-4-14 下午6:20:59 * @param item 需要插入的数据 */    public void add(User item)    {        try        {            mDao.createIfNotExists(item);        } catch (SQLException e)        {            e.printStackTrace();        }    }    /** * 删除所有数据 * @date 2016-4-14 下午6:42:54 */    public void deleted()    {        try        {            mDao.delete(queryAll());        } catch (SQLException e)        {            e.printStackTrace();        }    }    /** * 查询所有数据 * @author 漆可 * @date 2016-4-14 下午6:37:42 * @return */    public List<User> queryAll()    {        List<User> list = null;        try        {            list = mDao.queryForAll();        } catch (SQLException e)        {            e.printStackTrace();        }        return list;    }    /** * 根据id查询 * @date 2016-4-18 * @param areacode * @return */    public User getItemById(String id)    {        User areaItem = new User();        try        {            List<User> list = mDao.queryBuilder().where().eq(User.COLUMN_NAME_ID, id).query();            if (list != null && !list.isEmpty())            {                areaItem = list.get(0);            }        } catch (SQLException e)        {            e.printStackTrace();        }        return areaItem;    }    public void close()    {        mHelper.close();    }}

6、使用

程序页面,请自动忽视美观

Activity代码

public class MainActivity extends Activity {    private UserDao mUserDao;    @Override    protected void onCreate(Bundle savedInstanceState)    {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        mUserDao = new UserDao(this);    }    /** * 添加按钮点击事件 * @author 漆可 * @date 2016-5-4 下午5:33:12 * @param v */    public void addBtn(View v)    {        User user = null;        for (int i = 0; i < 10; i++)        {            user = new User(i+"", "张三", i+10);            mUserDao.add(user);        }    }    /** * 查询按钮点击事件 * @author 漆可 * @date 2016-5-4 下午5:33:24 * @param v * @throws SQLException */    public void queryBtn(View v) throws SQLException    {        List<User> users = mUserDao.queryAll();        Log.d("users", users.toString());    }}

布局就不不贴了,就是俩个按钮,一个添加数据,一个查询数据。文章最后提供了demo下载地址。其中添加按钮点击后添加10条数据,查询按钮查询表中所有数据。
下面是log日志,当第一次添加数据时,会自动创建一张表:

下面是查询结果

好了,整个demo其实很简单,使用ORMLite 进行数据库操作的流程如上文所述。

demo下载地址:http://download.csdn.net/detail/q649381130/9510098

更多相关文章

  1. “罗永浩抖音首秀”销售数据的可视化大屏是怎么做出来的呢?
  2. Nginx系列教程(三)| 一文带你读懂Nginx的负载均衡
  3. 不吹不黑!GitHub 上帮助人们学习编码的 12 个资源,错过血亏...
  4. Android共享全局数据
  5. 从零开始--系统深入学习android(实践-让我们开始写代码-Android框
  6. [Android] 40个比较重要的Android面试题,必知
  7. Android(安卓)& MCU之间的串口通信(收发数据)
  8. 初涉Android之数据库数据列表显示
  9. Android(安卓)NDK学习笔记6-JNI对引用数据类型的操作

随机推荐

  1. android layout属性介绍
  2. 【Android】 基于XMPP Smack框架 开发QQ
  3. [Android] 对android:layout_weight的一
  4. Android数据加密之Rsa加密
  5. 一样的Android,不一样的学习
  6. 修改android公共控件和后台服务
  7. Android布局控件属性
  8. Android(安卓)动态加载(二) - 基础篇(二)
  9. Android布局文件中常用的属性
  10. Android(安卓)SDK离线快速安装教程 Andro