什么是ORM框架 ORM(object Relational Mapping)框架采用元数据
来描述与关系映射细节,把对象持久化到数据库中。就是利用java的反射机制把对象和数据库记录映射关联起来。
特点和优势:
基于ORM关系操作数据库
配置方便
几乎不需要编写任何SQL语句就能够保存和检索SQLite数据库记录
每个操作都封装为一个类,如save()和delete()
对象形式数据存取。
首先配置文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jike.activeandroiddemo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
<application
android:name="com.jike.activeandroiddemo.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
//数据库的名称
android:name="AA_DB_NAME"
android:value="Stu.db" />
<meta-data
//数据库版本号
android:name="AA_DB_VERSION"
android:value="1" />
<activity
android:name="com.jike.activeandroiddemo.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
public class MyApplication extends Application {
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
ActiveAndroid.initialize(this);
}
}
/**
* 增删改查学生基本信息
*
* @author Administrator
*
*/
public class MainActivity extends Activity {
private Button btn_add;
private ListView lv;
private StuAdapter adapter;
private ArrayList<Student> list = new ArrayList<Student>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
private void initView() {
btn_add = (Button) this.findViewById(R.id.btn_add);
lv = (ListView) this.findViewById(R.id.lv);
adapter = new StuAdapter(this, list);
lv.setAdapter(adapter);
List<Student> stus = new Select().from(Student.class).execute();
for (int i = 0; i < stus.size(); i++) {
Student student = stus.get(i);
student.name = "HanMeiMei";
student.save();
}
list.addAll(stus);
for (int i = 0; i < 8; i++) {
Student stu = new Student();
stu.name = "Lilei" + i;
stu.age = 10 + i;
stu.save();
list.add(stu);
}
adapter.notifyDataSetChanged();
btn_add.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Student stu = new Student();
stu.name = "Lucy";
stu.age = 12;
stu.save();
list.add(stu);
adapter.notifyDataSetChanged();
}
});
}
}
@Table(name = "Students")
public class Student extends Model {
@Column(name = "Name")
public String name;
@Column(name = "Age")
public Integer age;
}
最后是适配器:
public class StuAdapter extends BaseAdapter {
private Context context;
private ArrayList<Student> list;
public StuAdapter(Context c, ArrayList<Student> lists) {
this.context = c;
this.list = lists;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int arg0) {
// TODO Auto-generated method stub
return list.get(arg0);
}
@Override
public long getItemId(int arg0) {
// TODO Auto-generated method stub
return arg0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
holder = new ViewHolder();
convertView = View.inflate(context, R.layout.item_stu, null);
holder.btn_del = (Button) convertView.findViewById(R.id.btn_del);
holder.tv = (TextView) convertView.findViewById(R.id.tv);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final Student stu = list.get(position);
holder.tv.setText(stu.name + "\n" + stu.age);
holder.btn_del.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
stu.delete();
list.remove(position);
notifyDataSetChanged();
}
});
return convertView;
}
class ViewHolder {
TextView tv;
Button btn_del;
}
}
这个属性加上去 不会每次启动activity都去扫一遍
<meta-data
android:name="AA_MODELL"
android:value="com.jike.activeandroid.Item,com.jike.activeandroid.Category" />
升级版本的话 在assets目录下 新建migrations名字文件 如1.sql1.
1sql里写上:
ALTER TABLE Categoryes ADD COLUMN StuId INTEGER;
/**
* /migrations/升级后的版本号.sql
*
* ALTER TABLE Category ADD COLUMN Count INTEGER;
*
* @author Administrator
*
*/