Your SlideShare is downloading. ×
0
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
greenDAO
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

greenDAO

1,775

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,775
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
58
Comments
0
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. greenDAOKewang
  • 2. Agenda● SQL syntax● SQLite @ Android● ORM● greenDAO
  • 3. SQL syntax
  • 4. SELECT● SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo FROM Persons INNER JOIN Orders ON Persons.P_Id=Orders.P_Id ORDER BY Persons.LastName● SELECT * FROM Persons WHERE LastName BETWEEN Hansen AND Pettersen● SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders GROUP BY Customer,OrderDate
  • 5. INSERT● INSERT INTO Persons (P_Id, LastName, FirstName) VALUES (5, Tjessem, Jakob)● INSERT INTO Persons VALUES (4,Nilsen, Johan, Bakken 2, Stavanger)
  • 6. UPDATE● UPDATE Persons SET Address=Nissestien 67, City=Sandnes WHERE LastName=Tjessem AND FirstName=Jakob● UPDATE Persons SET Address=Nissestien 67, City=Sandnes
  • 7. DELETE● DELETE FROM Persons WHERE LastName=Tjessem AND FirstName=Jakob
  • 8. SQLite @ Android
  • 9. 4 components● SQLiteOpenHelper● SQLiteDatabase● SQLiteQueryBuilder● Cursor
  • 10. SQLiteOpenHelperA helper class to manage databasecreation and version management.
  • 11. SQLiteDatabase + SQLiteQueryBuilder delete * 1 append * 3 insert * 3 replace(update) * 4 open * 5 query * 15
  • 12. Oh my god, Im a professional DBA!!!
  • 13. Never mind, we have...... execSQL * 2db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primarykey autoincrement, name varchar(20), age INTEGER)");
  • 14. and rawQuery * 4 db.rawQuery("select count(*) from person", null);
  • 15. Cursor Recordsets returned by a query
  • 16. Cursor getDataType * 16 movePosition * 6 isXXX * 6
  • 17. Sample code - Controllerdatasource = new CommentsDataSource(this);datasource.open();List<Comment> values = datasource.getAllComments();ArrayAdapter<Comment> adapter = newArrayAdapter<Comment>(this,android.R.layout.simple_list_item_1, values); open
  • 18. Sample code - ControllerString[] comments = new String[] { "Cool", "Very nice","Hate it" };int nextInt = new Random().nextInt(3);comment = datasource.createComment(comments[nextInt]);adapter.add(comment); insert
  • 19. Sample code - Controller if (getListAdapter().getCount() > 0) { comment = (Comment) getListAdapter().getItem(0); datasource.deleteComment(comment); adapter.remove(comment); } delete
  • 20. Sample code - Model@Overridepublic void onCreate(SQLiteDatabase database) { database.execSQL("create table " + TABLE_COMMENTS +"(" + COLUMN_ID + " integer primary key autoincrement, "+ COLUMN_COMMENT + " text not null);");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion,int newVersion) { db.execSQL("DROP TABLE IF EXISTS " + TABLE_COMMENTS); onCreate(db);}
  • 21. Sample code - Modelpublic Comment createComment(String comment) { ContentValues values = new ContentValues(); values.put("comment", comment); long id = database.insert("comments", null, values); Cursor cursor = database.query("comments", allColumns,"_id" + " = " + id, null, null, null, null); cursor.moveToFirst(); cursor.close(); return cursorToComment(cursor);}
  • 22. Sample code - Modelpublic void deleteComment(Comment comment) { long id = comment.getId(); database.delete("comments", "_id" + " = " + id, null);}
  • 23. Sample code - Model private Comment cursorToComment(Cursor cursor) { Comment comment = new Comment(); comment.setId(cursor.getLong(0)); comment.setComment(cursor.getString(1)); return comment; }
  • 24. Sample code - Modelpublic List<Comment> getAllComments() { List<Comment> comments = new ArrayList<Comment>(); Cursor cursor = database.query("comments", allColumns,null, null, null, null, null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { comments.add(cursorToComment(cursor)); cursor.moveToNext(); } cursor.close(); return comments;}
  • 25. No better choice ?
  • 26. ORMObject-relational mapping
  • 27. Record maps to Java Object
  • 28. Rails sample
  • 29. We use SQLite @ Android OrmLite greenDAO
  • 30. greenDAO
  • 31. Architecture
  • 32. Structure
  • 33. How to use...private void initDatabase() { helper = new DaoMaster.DevOpenHelper(this, NAME, null); master = new DaoMaster(helper.getWritableDatabase()); session = master.newSession(); cityDao = session.getCityDao(); townDao = session.getTownDao(); storeDao = session.getStoreDao();}
  • 34. How to use... cityDao.insert(new City(1L, "台北市")); storeDao._queryTown_Stores(townId).isEmpty()town =townDao.queryBuilder().where(TownDao.Properties.Name.eq("新莊區"), TownDao.Properties.CityId.eq(5)).unique();
  • 35. At first, generate code to use it.public static void main(String[] args) { schema = new Schema(4, "tw.kewang.smile319.model"); addCity(); addTown(); addStore(); new DaoGenerator().generateAll(schema, "../Prj/src-gen");}
  • 36. At first, generate code to use it.private static void addTown() { Entity town = schema.addEntity("Town"); town.addIdProperty().columnName("id"); town.addStringProperty("name").notNull(); town.addDoubleProperty("latitude"); town.addDoubleProperty("longitude"); Property cityId =town.addLongProperty("cityId").notNull().getProperty(); ToMany cityToTowns = city.addToMany(town, cityId); cityToTowns.setName("towns");}
  • 37. What is generator ?
  • 38. Generator contains...● A schema at least● A schema has many entities (models)● A entity has many property (data type, not null, autoincrement, index......etc.)● 2 entities have a relationship (optional) ● Project has a leader ● Leader belongs to a project
  • 39. QueryBuilder● whereXXX● joinXXX● orderXXX● listXXX● uniqueXXX● or, and● limit, offset, count
  • 40. FAQ
  • 41. 1. Why use generator ?
  • 42. Typically, annotation & reflection BUT1.cant compiler check2.reflection is very slow @ Android
  • 43. 2. Why use greenDAO ?
  • 44. Speed up !1.generator instead of reflection2.refine SQLiteCursor3.custom LongHashMap @ LUT
  • 45. 3. What about OrmLite ?
  • 46. References● http://greendao-orm.com/● https://github.com/greenrobot/greenDAO● http://www.slideshare.net/droidcon/green-dao
  • 47. 49

×