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

Android-SQLite3_4-greenDAO的使用

2015-11-29 16:20 591 查看
1.虽然Android公司提供的SQLiteOpenHelper很强大 但是呢 毕竟还是得熟悉SQL语句 而且操作起来并没有面向对象的思想 greenDAO做了又一轮的封装 加上了面向对象 让我们操作更加得心应手2.举例子
DaoMaster.java
package com.example.staring.greenDAO_Demo;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;import com.example.staring.greenDAO_Demo.NoteDao;import com.example.staring.greenDAO_Demo.CustomerDao;import com.example.staring.greenDAO_Demo.OrderDao;// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT./*** Master of DAO (schema version 1000): knows all DAOs.** 这个是DAO的祖宗 负责创建各种DAO*/public class DaoMaster extends AbstractDaoMaster {public static final int SCHEMA_VERSION = 1000;/** Creates underlying database table using DAOs. */public static void createAllTables(SQLiteDatabase db, boolean ifNotExists) {NoteDao.createTable(db, ifNotExists);CustomerDao.createTable(db, ifNotExists);OrderDao.createTable(db, ifNotExists);}/** Drops underlying database table using DAOs. */public static void dropAllTables(SQLiteDatabase db, boolean ifExists) {NoteDao.dropTable(db, ifExists);CustomerDao.dropTable(db, ifExists);OrderDao.dropTable(db, ifExists);}public static abstract class OpenHelper extends SQLiteOpenHelper {public OpenHelper(Context context, String name, CursorFactory factory) {super(context, name, factory, SCHEMA_VERSION);}@Overridepublic 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);}@Overridepublic 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) {super(db, SCHEMA_VERSION);registerDaoClass(NoteDao.class);registerDaoClass(CustomerDao.class);registerDaoClass(OrderDao.class);}public DaoSession newSession() {return new DaoSession(db, IdentityScopeType.Session, daoConfigMap);}public DaoSession newSession(IdentityScopeType type) {return new DaoSession(db, type, daoConfigMap);}}
DaoSession.java
package com.example.staring.greenDAO_Demo;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;import com.example.staring.greenDAO_Demo.Note;import com.example.staring.greenDAO_Demo.Customer;import com.example.staring.greenDAO_Demo.Order;import com.example.staring.greenDAO_Demo.NoteDao;import com.example.staring.greenDAO_Demo.CustomerDao;import com.example.staring.greenDAO_Demo.OrderDao;// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT./*** {@inheritDoc}** @see AbstractDaoSession*/public class DaoSession extends AbstractDaoSession {private final DaoConfig noteDaoConfig;private final DaoConfig customerDaoConfig;private final DaoConfig orderDaoConfig;private final NoteDao noteDao;private final CustomerDao customerDao;private final OrderDao orderDao;public DaoSession(SQLiteDatabase db, IdentityScopeType type, Map<Class<? extends AbstractDao<?, ?>>, DaoConfig>daoConfigMap) {super(db);noteDaoConfig = daoConfigMap.get(NoteDao.class).clone();noteDaoConfig.initIdentityScope(type);customerDaoConfig = daoConfigMap.get(CustomerDao.class).clone();customerDaoConfig.initIdentityScope(type);orderDaoConfig = daoConfigMap.get(OrderDao.class).clone();orderDaoConfig.initIdentityScope(type);noteDao = new NoteDao(noteDaoConfig, this);customerDao = new CustomerDao(customerDaoConfig, this);orderDao = new OrderDao(orderDaoConfig, this);registerDao(Note.class, noteDao);registerDao(Customer.class, customerDao);registerDao(Order.class, orderDao);}public void clear() {noteDaoConfig.getIdentityScope().clear();customerDaoConfig.getIdentityScope().clear();orderDaoConfig.getIdentityScope().clear();}public NoteDao getNoteDao() {return noteDao;}public CustomerDao getCustomerDao() {return customerDao;}public OrderDao getOrderDao() {return orderDao;}}
Note.java
package com.example.staring.greenDAO_Demo;// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT. Enable "keep" sections if you want to edit./*** Entity mapped to table "NOTE".*/public class Note {private Long id;/** Not-null value. */private String text;private String comment;private java.util.Date date;public Note() {}public Note(Long id) {this.id = id;}public Note(Long id, String text, String comment, java.util.Date date) {this.id = id;this.text = text;this.comment = comment;this.date = date;}public Long getId() {return id;}public void setId(Long id) {this.id = id;}/** Not-null value. */public String getText() {return text;}/** Not-null value; ensure this value is available before it is saved to the database. */public void setText(String text) {this.text = text;}public String getComment() {return comment;}public void setComment(String comment) {this.comment = comment;}public java.util.Date getDate() {return date;}public void setDate(java.util.Date date) {this.date = date;}}
NoteDAO.java
package com.example.staring.greenDAO_Demo;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteStatement;import de.greenrobot.dao.AbstractDao;import de.greenrobot.dao.Property;import de.greenrobot.dao.internal.DaoConfig;import com.example.staring.greenDAO_Demo.Note;// THIS CODE IS GENERATED BY greenDAO, DO NOT EDIT./*** DAO for table "NOTE".*/public class NoteDao extends AbstractDao<Note, Long> {public static final String TABLENAME = "NOTE";/*** 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 Text = new Property(1, String.class, "text", false, "TEXT");public final static Property Comment = new Property(2, String.class, "comment", false, "COMMENT");public final static Property Date = new Property(3, java.util.Date.class, "date", false, "DATE");};//构造函数public NoteDao(DaoConfig config) {super(config);}public NoteDao(DaoConfig config, DaoSession daoSession) {super(config, daoSession);}/** Creates the underlying database table. */public static void createTable(SQLiteDatabase db, boolean ifNotExists) {//创建表String constraint = ifNotExists? "IF NOT EXISTS ": "";db.execSQL("CREATE TABLE " + constraint + "\"NOTE\" (" + //"\"_id\" INTEGER PRIMARY KEY ," + // 0: id"\"TEXT\" TEXT NOT NULL ," + // 1: text"\"COMMENT\" TEXT," + // 2: comment"\"DATE\" INTEGER);"); // 3: date}/** Drops the underlying database table. */public static void dropTable(SQLiteDatabase db, boolean ifExists) {//删除表String sql = "DROP TABLE " + (ifExists ? "IF EXISTS " : "") + "\"NOTE\"";db.execSQL(sql);}/** @inheritdoc */@Overrideprotected void bindValues(SQLiteStatement stmt, Note entity) {stmt.clearBindings();Long id = entity.getId();if (id != null) {stmt.bindLong(1, id);}stmt.bindString(2, entity.getText());String comment = entity.getComment();if (comment != null) {stmt.bindString(3, comment);}java.util.Date date = entity.getDate();if (date != null) {stmt.bindLong(4, date.getTime());}}/** @inheritdoc */@Overridepublic Long readKey(Cursor cursor, int offset) {return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);}/** @inheritdoc */@Overridepublic Note readEntity(Cursor cursor, int offset) {Note entity = new Note( //cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // idcursor.getString(offset + 1), // textcursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // commentcursor.isNull(offset + 3) ? null : new java.util.Date(cursor.getLong(offset + 3)) // date);return entity;}/** @inheritdoc */@Overridepublic void readEntity(Cursor cursor, Note entity, int offset) {entity.setId(cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0));entity.setText(cursor.getString(offset + 1));entity.setComment(cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2));entity.setDate(cursor.isNull(offset + 3) ? null : new java.util.Date(cursor.getLong(offset + 3)));}/** @inheritdoc */@Overrideprotected Long updateKeyAfterInsert(Note entity, long rowId) {entity.setId(rowId);return rowId;}/** @inheritdoc */@Overridepublic Long getKey(Note entity) {if(entity != null) {return entity.getId();} else {return null;}}/** @inheritdoc */@Overrideprotected boolean isEntityUpdateable() {return true;}}
NoteMainActivity.java
/** Copyright (C) 2011 Markus Junginger, greenrobot (http://greenrobot.de)** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package com.example.staring.greenDAO_Demo;import java.text.DateFormat;import java.util.Date;import android.app.ListActivity;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.view.KeyEvent;import android.view.View;import android.view.inputmethod.EditorInfo;import android.widget.EditText;import android.widget.ListView;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import android.widget.TextView.OnEditorActionListener;import com.example.staring.R;public class NoteActivity extends ListActivity {private SQLiteDatabase db;private EditText editText;private DaoMaster daoMaster;private DaoSession daoSession;private NoteDao noteDao;private Cursor cursor;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);DaoMaster.DevOpenHelper helper = new DaoMaster.DevOpenHelper(this, "notes-db", null);db = helper.getWritableDatabase();daoMaster = new DaoMaster(db);daoSession = daoMaster.newSession();noteDao = daoSession.getNoteDao();String textColumn = NoteDao.Properties.Text.columnName;String orderBy = textColumn + " COLLATE LOCALIZED ASC";cursor = db.query(noteDao.getTablename(), noteDao.getAllColumns(), null, null, null, null, orderBy);String[] from = { textColumn, NoteDao.Properties.Comment.columnName };int[] to = { android.R.id.text1, android.R.id.text2 };//绑定数据源SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_2, cursor, from,to);setListAdapter(adapter);editText = (EditText) findViewById(R.id.editTextNote);addUiListeners();}protected void addUiListeners() {editText.setOnEditorActionListener(new OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {//监听键盘的enter健 如果按下 就执行addNoteif (actionId == EditorInfo.IME_ACTION_DONE) {addNote();return true;}return false;}});final View button = findViewById(R.id.buttonAdd);button.setEnabled(false);editText.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {//Text长度不为0 按钮可以操作 就是不可以插入空值 如果我插入呢??boolean enable = s.length() != 0;button.setEnabled(enable);}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count, int after) {}@Overridepublic void afterTextChanged(Editable s) {}});}public void onMyButtonClick(View view) {addNote();}private void addNote() {String noteText = editText.getText().toString();editText.setText("");final DateFormat df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);String comment = "Added on " + df.format(new Date());//这里构建一个noteNote note = new Note(null, noteText, comment, new Date());//这里把note添加进入noteDao.insert(note);Log.d("DaoExample", "Inserted new note, ID: " + note.getId());cursor.requery();}@Overrideprotected void onListItemClick(ListView l, View v, int position, long id) {//点击列表项删除noteDao.deleteByKey(id);Log.d("DaoExample", "Deleted note, ID: " + id);cursor.requery();}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: