Android-SQLite3_4-greenDAO的使用

来源:互联网 发布:帝国cms手机端 tags 编辑:程序博客网 时间:2024/05/16 05:36

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);        }        @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) {        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 */    @Override    protected 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 */    @Override    public Long readKey(Cursor cursor, int offset) {        return cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0);    }        /** @inheritdoc */    @Override    public Note readEntity(Cursor cursor, int offset) {        Note entity = new Note( //            cursor.isNull(offset + 0) ? null : cursor.getLong(offset + 0), // id            cursor.getString(offset + 1), // text            cursor.isNull(offset + 2) ? null : cursor.getString(offset + 2), // comment            cursor.isNull(offset + 3) ? null : new java.util.Date(cursor.getLong(offset + 3)) // date        );        return entity;    }         /** @inheritdoc */    @Override    public 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 */    @Override    protected Long updateKeyAfterInsert(Note entity, long rowId) {        entity.setId(rowId);        return rowId;    }        /** @inheritdoc */    @Override    public Long getKey(Note entity) {        if(entity != null) {            return entity.getId();        } else {            return null;        }    }    /** @inheritdoc */    @Override        protected 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;    @Override    public 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() {            @Override            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {                //监听键盘的enter健 如果按下 就执行addNote                if (actionId == EditorInfo.IME_ACTION_DONE) {                    addNote();                    return true;                }                return false;            }        });        final View button = findViewById(R.id.buttonAdd);        button.setEnabled(false);        editText.addTextChangedListener(new TextWatcher() {            @Override            public void onTextChanged(CharSequence s, int start, int before, int count) {                //Text长度不为0 按钮可以操作 就是不可以插入空值 如果我插入呢??                boolean enable = s.length() != 0;                button.setEnabled(enable);            }            @Override            public void beforeTextChanged(CharSequence s, int start, int count, int after) {            }            @Override            public 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());        //这里构建一个note        Note note = new Note(null, noteText, comment, new Date());        //这里把note添加进入        noteDao.insert(note);        Log.d("DaoExample", "Inserted new note, ID: " + note.getId());        cursor.requery();    }    @Override    protected void onListItemClick(ListView l, View v, int position, long id) {        //点击列表项删除        noteDao.deleteByKey(id);        Log.d("DaoExample", "Deleted note, ID: " + id);        cursor.requery();    }}

0 0
原创粉丝点击