【Android 使用ORMLite操作数据库】进行安卓开发少不了要跟数据库打交道。然而谷歌为我们提供的数据库操作类SQLiteHelper生涩难懂,尤其是要求熟练SQL语句。
java是一门面向对象语言,使用面向对象的思想管理数据库无疑更加合适。
1、下载Jar包
- 可以去官网下载core以及android 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="https://www.it610.com/article/男") 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、注解含义
- 在类的申明第一行上面加上:
@DatabaseTable(tableName = "tb_user")
- Field注释,包含以下几种字段定义 :
@DatabaseField
columnName
指定列名,不指定的话默认使用变量名
@DatabaseField(columnName="age") private String mAge;
defaultValue
指设置该列默认值
@DatabaseField(defaultValue="https://www.it610.com/article/男") 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 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 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 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 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 queryAll()
{
List 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 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 users = mUserDao.queryAll();
Log.d("users", users.toString());
}
}
布局就不不贴了,就是俩个按钮,一个添加数据,一个查询数据。文章最后提供了demo下载地址。其中添加按钮点击后添加10条数据,查询按钮查询表中所有数据。
下面是log日志,当第一次添加数据时,会自动创建一张表:
文章图片
下面是查询结果
文章图片
好了,整个demo其实很简单,使用ORMLite 进行数据库操作的流程如上文所述。
demo下载地址:http://download.csdn.net/detail/q649381130/9510098