Android的用GreenDao操作数据库
来源:互联网 发布:对外贸易依存度数据 编辑:程序博客网 时间:2024/05/15 09:09
1、GreenDao简介
GreenDao就是实现Java对象和SQLite Datebase的一个媒介人,简化了SQLite的操作。如果学过ssh的人都知道类似Hibernia。
GreenDao
官方网站http://greendao-orm.com/
2、创建一个Android项目,把greendao-1.3.7.jar添加到libs中
3、创建一个Student.class类
package com.example.androidgreendao1;import java.util.Date;public class Student { private Long id; private String firstName; private String secondName; private java.util.Date birthday; private Long age; public Student() { } public Student(Long id) { this.id = id; } public Student(Long id, String firstName, String secondName, Long age, Date birthday) { super(); this.id = id; this.firstName = firstName; this.secondName = secondName; this.birthday = birthday; this.age = age; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getSecondName() { return secondName; } public void setSecondName(String secondName) { this.secondName = secondName; } public java.util.Date getBirthday() { return birthday; } public void setBirthday(java.util.Date birthday) { this.birthday = birthday; } public Long getAge() { return age; } public void setAge(Long age) { this.age = age; }}
4、创建StudentDao,继承AbstractDao
package com.example.androidgreendao1;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteStatement;import de.greenrobot.dao.AbstractDao;import de.greenrobot.dao.AbstractDaoSession;import de.greenrobot.dao.Property;import de.greenrobot.dao.internal.DaoConfig;public class StudentDao extends AbstractDao<Student, Long> { public static final String TABLENAME = "STUDENT"; /** * Properties of entity Note.<br/> * Can be used for QueryBuilder and for referencing column names. */ public static class Properties { public final static Property Id = new Property(0, Long.class, "id", true, "_id"); public final static Property FirstName = new Property(1, String.class, "firstName", false, "firstName"); public final static Property SecondName = new Property(2, String.class, "secondName", false, "secondName"); public final static Property Age = new Property(3, String.class, "age", false, "age"); public final static Property Birthday = new Property(4, java.util.Date.class, "birthday", false, "birthday"); }; public StudentDao(DaoConfig config, AbstractDaoSession daoSession) { super(config, daoSession); // TODO Auto-generated constructor stub } public StudentDao(DaoConfig config) { super(config); // TODO Auto-generated constructor stub } /** Creates the underlying database table. */ public static void createTable(SQLiteDatabase db, boolean ifNotExists) { String constraint = ifNotExists ? "IF NOT EXISTS " : ""; db.execSQL("CREATE TABLE " + constraint + "\"" + TABLENAME + "\" (" + // "\"_id\" INTEGER PRIMARY KEY ," + // 0: id "\"firstName\" TEXT NOT NULL ," + // 1: firstName "\"secondName\" TEXT NOT NULL ," + // 2: secondName "\"age\" INTEGER ," + // 3: age "\"birthday\" INTEGER);"); // 4: birthday } /** Drops the underlying database table. */ public static void dropTable(SQLiteDatabase db, boolean ifExists) { String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"" + TABLENAME + "\""; db.execSQL(sql); } @Override protected void bindValues(SQLiteStatement stmt, Student entity) { // TODO Auto-generated method stub stmt.clearBindings(); Long id = entity.getId(); if (id != null) { stmt.bindLong(1, id); } String fristName = entity.getFirstName(); if (fristName != null) { stmt.bindString(2, fristName); } String secondName = entity.getSecondName(); if (secondName != null) { stmt.bindString(3, secondName); } Long age = entity.getAge(); if (age != null) { stmt.bindLong(4, age); } java.util.Date birthday = entity.getBirthday(); if (birthday != null) { stmt.bindLong(5, birthday.getTime()); } } @Override protected Student readEntity(Cursor cursor, int offset) { // TODO Auto-generated method stub Student entity = new Student( // cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id cursor.getString(offset + 1), // text cursor.getString(offset + 2), // text cursor.isNull(offset + 3) ? null : cursor.getLong(offset + 3), // comment cursor.isNull(offset + 4) ? null : new java.util.Date(cursor .getLong(offset + 4)) // date ); return entity; } @Override protected Long readKey(Cursor cursor, int offset) { // TODO Auto-generated method stub return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0); } @Override protected void readEntity(Cursor cursor, Student entity, int offset) { // TODO Auto-generated method stub entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0)); entity.setFirstName(cursor.getString(offset + 1)); entity.setSecondName(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2)); entity.setAge(cursor.isNull(offset + 3) ? null : cursor.getLong(offset + 3)); entity.setBirthday(cursor.isNull(offset + 4) ? null : new java.util.Date(cursor.getLong(offset + 4))); } @Override protected Long updateKeyAfterInsert(Student entity, long rowId) { // TODO Auto-generated method stub entity.setId(rowId); return rowId; } @Override protected Long getKey(Student entity) { // TODO Auto-generated method stub if(entity != null) { return entity.getId(); } else { return null; } } @Override protected boolean isEntityUpdateable() { // TODO Auto-generated method stub return false; }}
5、创建DaoSession
package com.example.androidgreendao1;import android.database.sqlite.SQLiteDatabase;import java.util.Map;import de.greenrobot.dao.AbstractDao;import de.greenrobot.dao.AbstractDaoSession;import de.greenrobot.dao.identityscope.IdentityScopeType;import de.greenrobot.dao.internal.DaoConfig;// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT./** * {@inheritDoc} * * @see de.greenrobot.dao.AbstractDaoSession */public class DaoSession extends AbstractDaoSession { private final DaoConfig studentDaoConfig; private final StudentDao studentDao; public DaoSession(SQLiteDatabase db, IdentityScopeType type, Map<Class<? extends AbstractDao<?, ?>>, DaoConfig> daoConfigMap) { super(db); studentDaoConfig = daoConfigMap.get(StudentDao.class).clone(); studentDaoConfig.initIdentityScope(type); studentDao = new StudentDao(studentDaoConfig, this); registerDao(Student.class, studentDao); } public void clear() { studentDaoConfig.getIdentityScope().clear(); } public StudentDao getNoteDao() { return studentDao; }}
6、DaoMaster
package com.example.androidgreendao1;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import de.greenrobot.dao.AbstractDaoMaster;
import de.greenrobot.dao.identityscope.IdentityScopeType;
public class DaoMaster extends AbstractDaoMaster {
public static final int SCHEMA_VERSION = 1;/** Creates underlying database table using DAOs. */public static void createAllTables(SQLiteDatabase db, boolean ifNotExists) { StudentDao.createTable(db, ifNotExists);}/** Drops underlying database table using DAOs. */public static void dropAllTables(SQLiteDatabase db, boolean ifExists) { StudentDao.dropTable(db, ifExists);}public static abstract class OpenHelper extends SQLiteOpenHelper { public OpenHelper(Context context, String name, CursorFactory factory) { super(context, name, factory, SCHEMA_VERSION); } @Override public void onCreate(SQLiteDatabase db) { Log.i("greenDAO", "Creating tables for schema version " + SCHEMA_VERSION); createAllTables(db, false); }}/** WARNING: Drops all table on Upgrade! Use only during development. */public static class DevOpenHelper extends OpenHelper { public DevOpenHelper(Context context, String name, CursorFactory factory) { super(context, name, factory); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { Log.i("greenDAO", "Upgrading schema from version " + oldVersion + " to " + newVersion + " by dropping all tables"); dropAllTables(db, true); onCreate(db); }}public DaoMaster(SQLiteDatabase db, int schemaVersion) { super(db, SCHEMA_VERSION); // TODO Auto-generated constructor stub registerDaoClass(StudentDao.class);}@Overridepublic DaoSession newSession() { // TODO Auto-generated method stub return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);}@Overridepublic DaoSession newSession(IdentityScopeType type) { // TODO Auto-generated method stub return new DaoSession(db, type, daoConfigMap);}
}
7、单例GreenDaoSingleton
package com.example.androidgreendao1;import com.example.androidgreendao1.DaoMaster.DevOpenHelper;import de.greenrobot.dao.query.QueryBuilder;import android.content.Context;import android.database.sqlite.SQLiteDatabase;public class GreenDaoSingleton { private DevOpenHelper helper; private SQLiteDatabase db; private DaoMaster daoMaster; private DaoSession daoSession; private StudentDao studentDao; private GreenDaoSingleton(Context context) { helper = new DaoMaster.DevOpenHelper(context, "greendao-db", null); // enable SQL and parameter logging on the QueryBuilder: QueryBuilder.LOG_SQL = true; QueryBuilder.LOG_VALUES = true; db = helper.getWritableDatabase(); daoMaster = new DaoMaster(db, 1); daoSession = daoMaster.newSession(); studentDao = daoSession.getNoteDao(); } private static GreenDaoSingleton single = null; // 静态工厂方法 public static synchronized GreenDaoSingleton getInstance(Context context) { if (single == null) { synchronized (GreenDaoSingleton.class) { if (single == null) { single = new GreenDaoSingleton(context); } } } return single; } public StudentDao getStudentDao() { return studentDao; }}
8、listview的适配器
package com.example.androidgreendao1;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;public class MyAdapter extends BaseAdapter { private List<Student> list=new ArrayList<>(); private Context context; public MyAdapter(List<Student> list, Context context) { this.list = list; this.context = context; } public void setList(List<Student> list) { this.list = list; notifyDataSetChanged(); } @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 position) { // TODO Auto-generated method stub return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub ViewHolder viewHolder=null; if(convertView==null){ viewHolder=new ViewHolder(); convertView=View.inflate(context, R.layout.list_item, null); viewHolder.textView1=(TextView)convertView.findViewById(R.id.textView1); viewHolder.textView2=(TextView)convertView.findViewById(R.id.textView2); viewHolder.textView3=(TextView)convertView.findViewById(R.id.textView3); viewHolder.textView4=(TextView)convertView.findViewById(R.id.textView4); viewHolder.textView5=(TextView)convertView.findViewById(R.id.textView5); convertView.setTag(viewHolder); }else{ viewHolder=(ViewHolder)convertView.getTag(); } Student student=list.get(position); viewHolder.textView1.setText(student.getId()+""); viewHolder.textView2.setText(student.getFirstName()+""); viewHolder.textView3.setText(student.getSecondName()+""); viewHolder.textView4.setText(student.getAge()+""); viewHolder.textView5.setText(student.getBirthday()+""); return convertView; } class ViewHolder{ TextView textView1; TextView textView2; TextView textView3; TextView textView4; TextView textView5; }}
9、MainActivity
package com.example.androidgreendao1;import java.text.DateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.AdapterView;import android.widget.AdapterView.OnItemLongClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.ListView;import com.example.androidgreendao1.StudentDao.Properties;public class MainActivity extends Activity implements OnClickListener, OnItemLongClickListener { private EditText editTextFirst, editTextSecond; private Button button; private ListView listView; private MyAdapter myAdapter; private List<Student> list = new ArrayList<>(); // GreenDao @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); super.setContentView(R.layout.activity_main); this.editTextFirst = (EditText) findViewById(R.id.firstname); this.editTextSecond = (EditText) findViewById(R.id.secondname); this.button = (Button) findViewById(R.id.buttonAdd); this.listView = (ListView) findViewById(R.id.listView); this.button.setOnClickListener(this); this.myAdapter = new MyAdapter(list, this); this.listView.setAdapter(myAdapter); this.listView.setOnItemLongClickListener(this); resh(); } @Override public void onClick(View v) { // TODO Auto-generated method stub String noteTextFrist = editTextFirst.getText().toString(); editTextFirst.setText(""); String noteTextSecond = editTextSecond.getText().toString(); editTextSecond.setText(""); final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); String comment = noteTextSecond + df.format(new Date()); Student student = new Student(null, noteTextFrist, comment, 17L, new Date()); GreenDaoSingleton.getInstance(this).getStudentDao().insert(student); resh(); } private void resh() { List<Student> joes = GreenDaoSingleton.getInstance(this) .getStudentDao().queryBuilder() // .where(Properties.FirstName.eq("常")) // .or(Properties.Birthday.gt(1970) .orderAsc(Properties.FirstName) // .limit(2) // .offset(1) .list(); /* * QueryBuilder qb = studentDao.queryBuilder(); * qb.where(Properties.FirstName.eq("Joe"), * qb.or(Properties.Birthday.gt(1970), * qb.and(Properties.Birthday.eq(1970), Properties.Birthday.ge(10)))); * List<Student> joes=qb.list(); */ list.clear(); list.addAll(joes); myAdapter.setList(list); } @Override public boolean onItemLongClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Student student = list.get(arg2); GreenDaoSingleton.getInstance(this).getStudentDao() .deleteByKey(student.getId()); resh(); return false; }}
10、activity_main.xml、list_item.xml
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/linearLayout1" android:orientation="horizontal"> <EditText android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="wrap_content" android:inputType="text" android:imeOptions="actionDone" android:id="@+id/firstname" android:hint="firstname"></EditText> <EditText android:layout_height="wrap_content" android:layout_weight="1" android:layout_width="wrap_content" android:inputType="text" android:imeOptions="actionDone" android:id="@+id/secondname" android:hint="secondname"></EditText> <Button android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="Add" android:id="@+id/buttonAdd" android:onClick="onMyButtonClick"></Button> </LinearLayout> <ListView android:layout_height="wrap_content" android:id="@+id/listView" android:layout_width="fill_parent"></ListView></LinearLayout>
list_item.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentTop="true" android:text="TextView" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginLeft="26dp" android:layout_toRightOf="@+id/textView1" android:text="TextView" /> <TextView android:id="@+id/textView3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_marginLeft="36dp" android:layout_toRightOf="@+id/textView2" android:text="TextView" /> <TextView android:id="@+id/textView4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView2" android:layout_below="@+id/textView2" android:layout_marginTop="14dp" android:text="TextView" /> <TextView android:id="@+id/textView5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/textView4" android:layout_alignBottom="@+id/textView4" android:layout_alignLeft="@+id/textView3" android:text="TextView" /></RelativeLayout>
源码下载在评论中,菜鸟一枚,欢迎大神指导。。。
- Android的用GreenDao操作数据库
- Android数据库操作--greenDAO的入门使用
- Android之---用GreenDao操作数据库
- android使用GreenDao操作数据库
- Android 操作数据库的框架——greenDAO的学习
- Android 操作数据库的框架——greenDAO的学习
- Android操作数据库的框架-GreenDao基本使用记录
- Android数据库操作第三方库GreenDao的使用
- android的存储GreenDao数据库
- Android--------GreenDao数据库的使用
- Android数据库 GreenDao的使用
- Android数据库GreenDAO3.2.2的使用(三,GreenDao操作外部数据库----操作.db数据库)
- android greenDao SQLite数据库操作工具类
- android:SQLiteOpenHelper 与 greenDao 数据库操作
- android 数据库操作 GreenDAO 第三方开源项目
- Android Studio平台使用GreenDao操作数据库
- Android 初使用GreenDAO框架操作数据库
- GreenDao自动生成Android数据库操作代码
- 《NumPy Beginner's Guide》笔记Chapter5
- 主成分分析(Principal components analysis)-最小平方误差解释
- go语言defer执行时机简单分析
- Vim使用总结
- 关于编译器的一个问题
- Android的用GreenDao操作数据库
- hibernate 下载地址
- 发个手机全息投影(制作方法已放出,补上世界第一公主)
- 线性判别分析(Linear Discriminant Analysis)(一)
- 动态规划经典联系题----找零钱
- POI操作Excel常用方法总结
- 线性判别分析(Linear Discriminant Analysis)(二)
- A. Gabriel and Caterpillar(cf)
- 第五周总结