您的位置:首页 > 移动开发 > Android开发

快速开发一个属于自己的android数据库类库

2016-03-20 11:58 459 查看
最近在重构项目,其中数据库这一块非常的不方便,代码是前辈们在12年左右写的,数据库操作基本上是写死的。要加一个字段就的改onUpgrade()方法。而且都是在主线程操作的,影响ui体验,极其难维护,于是打算自己写一个方便操作的数据库操作的类库。

android使用的是Sqlite数据库。sqlite跟大型数据库MySql,oracle等是有一定区别的,也就是好多sql不支持,这点要特别注意。

sqlite能干的事情:
1.能增加列
alter table 'tablename' add column 'xx text unique'
2.更改表名
alter table 'tablename' rename to 'othername'
3.删除表
drop table IF EXISTS 'tablename'
4.把一个表的数据移到仍外一个表
insert into 'tablename(,,)' form select
'lie1','lie2' from 'tablename' sqlite

不能干的事情 1.修改列名 2.修改列限定符


上面试都是伪代码,能看到意思就可以了。上面的几个操作都是要注意的,不要测试时sql不起作用还不知道哪里出错了,一直盯着sql看,大声吼叫:我的sql没错啊,是没错,单人家不支持啊 …^_^.

好,知道了sqlite的基本操作就可以开始了。这里不会很详细的将每一个细节,文章底部会上传代码,看下代码就明白了,没有多少代码。

这里讲下怎么使用,然后再说下设计理念。



由于公司设备问题还在用eclipse啊。所以这次使用eclipse写的,单无论用什么写都是开发工具,工具而已是吧。


#数据库名字
database=employee

#数据库版本 要跟新表示表里面的version和这里的version都要增大
version=6

#表对于的class table_index   index 累加
table_1=com.example.testdb.table.Student
table_2=com.example.testdb.table.Teacher
table_3=com.example.testdb.table.Person
#table_4=com.example.testdb.table.PersonBlack


在database.properties里面的写法如上。

再来看一个表的示例代码

public class Student extends BaseTableBean {

@Limit("unique")
public String name;

public String sex;

public String like;

public long height;

@Override
public String toString() {
return "Student [name=" + name + ", sex=" + sex + ", height=" + height
+ "]";
}

@Override
public int getVersion() {
// TODO Auto-generated method stub
return 2;
}

@Override
public TableUpdateType getUpdateType() {
// TODO Auto-generated method stub
return TableUpdateType.ADD;
}

}


这里解释下上面要注意的点

1.BaseTableBean:一定要继承这个基类

2.@Limit:是限定符 比如上面要name列唯一就加上unique

3.getUpdateType:这个方法的意思就是你修改表是要怎么操作,这个方法要当修改表时才有效,第一次创建时无效的。

下面看下具体操作

1.插入数据

final Student student = new Student();
student.name = "weihu" + new Random().nextInt(10);
student.height = 167;
student.like = "football";
student.sex = "女";
DatabaseManager.getInstance().insert(student);


2.查询数据

DatabaseManager.getInstance().selectsSync(Student.class,
new HandleFinish<List<Student>>() {
@Override
public void onFinish(List<Student> t) {
// TODO Auto-generated method stub
System.out.println("查询所有数据");
if (t != null)
for (Student student1 : t) {
System.out.println(student1.toString());
}
}
});


3.查询指定数据

final Student student = new Student();
student.name = et_name.getText().toString();
student.height = 167;
DatabaseManager.getInstance().selectForConditionSync(student,
new HandleFinish<List<Student>>() {

@Override
public void onFinish(List<Student> t) {
// TODO Auto-generated method stub
System.out.println("查询指定条件数据");
if (t != null)
for (Student student1 : t) {
System.out.println(student1.toString());
}
}
});


删除更新都是一样的 这里就不写了

现在操作数据库只要操作一个javabean就可以了 ,是不是可以跟sql说拜拜了,而且里面是跟rxjava结合的,都是异步执行数据库操作。

现在支持的功能有

1.添加字段添加一个属性就可以了

2.修改字段(保存原来数据)

3.自动删除无用表

这些都可以满足基本app的用途了,但即时通讯这类app大量操作数据库,在执行效率上也有更多考虑,就不太适合了,因为这里大量使用了反射,虽然反射不是很慢了,但也包含一个“慢”字,移动端最怕的就是卡。

当然这个只是个初步,后面要需要完善

代码下载代码下载

喜欢就点个赞吧。。。。^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: