Android 使用ActiveAndroid 管理数据库


先看看效果:

Android 使用ActiveAndroid 管理数据库_第1张图片


ActiveAndroid简单介绍:

ActiveAndroid是采用活动记录(Active Record)架构模式设计的适用于Android平台的轻量级ORM架构,能简单地通过如save()和delete()等方法来做到数据的增删改查等操作。
开始配置:

先引入jar包,在gradle中添加依赖:

<span style="font-size:18px;">compile files('libs/activeandroid-3.1-3.jar')</span>

并在Manifest文件中就Metadata属性:

<span style="font-size:18px;"></span><pre style="font-family: 'Source Code Pro'; background-color: rgb(255, 255, 255);"><pre name="code" class="html"><!--ActiveAndrodi创建数据库-->
<meta-data
    android:name="AA_DB_NAME"
    android:value="troy.db" />
<meta-data
    android:name="AA_DB_VERSION"
    android:value="17" />

参数分别是数据库名称和版本



在Application中添加相应对ActiveAndroid的管理方法:

<span style="font-size:18px;">public class APP extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        ActiveAndroid.initialize(this);//做初始化工作
    }
    @Override
    public void onTerminate() {
        super.onTerminate();
        ActiveAndroid.dispose();//做清理工作
    }
}</span>

其中我们扒下dispose()方法是如何执行的?

点击源码先是执行:

<span style="font-size:18px;">public static void dispose() {
        Cache.dispose();
    }</span>

然后执行一个静态的同步方法:

<span style="font-size:18px;"> public static synchronized void dispose() {
        closeDatabase();
        sEntities = null;
        sModelInfo = null;
        sDatabaseHelper = null;
        sIsInitialized = false;
        Log.v("ActiveAndroid disposed. Call initialize to use library.");
    }</span>
执行了closeDataBase()方法,再看:
<span style="font-size:18px;">public static synchronized void closeDatabase() {
        sDatabaseHelper.close();
    }</span>

<span style="font-size:18px;">private static DatabaseHelper sDatabaseHelper;
.....
public final class DatabaseHelper extends SQLiteOpenHelper {}
.....</span>

可以看到其实dispose()方法最后执行是关闭SQLiteOpenHelper();

创建数据实体类:

实体类需要继承com.activeandroid.Model类:

@Table(name="Hero" ,id="_id")
public class Hero extends Model {
    @Column(name="name")
    public String name;
    @Column(name="type")
    public String type;
    @Column(name="power")
    public int power;

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Hero{" +
                "name='" + name + '\'' +
                ", type='" + type + '\'' +
                ", power=" + power +
                '}';
    }
}

声明表名使用**@Table(name="")**,声明列名使用**@Colnmn(name="")**,要注意的是表名声明的后面加上: id="_id",带下划线。

DEMO实例:代码中都有注释

<span style="font-size:18px;">public class MainActivity extends AppCompatActivity {
    private Button bt;
    private Button bt2;
    private Button bt3,bt4;
    private TextView  tv;
    StringBuilder contentUI=new StringBuilder("");

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt=(Button)findViewById(R.id.button);
        bt2=(Button)findViewById(R.id.button2);
        bt3=(Button)findViewById(R.id.button3);
        bt4=(Button)findViewById(R.id.button4);
        tv=(TextView)findViewById(R.id.tv);

        bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                saveData();//保存数据
            }
        });

        bt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                contentUI=showData();//查询数据
                Toast.makeText(MainActivity.this,"查询数据ok",Toast.LENGTH_SHORT).show();
                tv.setText(contentUI);
            }
        });
        bt3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                deleteData();//删除数据
            }
        });
        bt4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                updateData();//更新数据
            }
        });
    }

    /**
     * 数据库保存数据
     */
    private  void saveData(){
        /*保存数据有两种方式:单挑模式和批量插入模式,批量模式建议使用事务*/
        ActiveAndroid.beginTransaction();
        try {
            for (int i=0;i<10;i++){
                Hero hero=new Hero();
                hero.name="李白"+i;
                hero.type="诗人"+i;
                hero.power=i*10;
                hero.save();
            }
            ActiveAndroid.setTransactionSuccessful();
            Toast.makeText(MainActivity.this,"插入数据ok",Toast.LENGTH_SHORT).show();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            ActiveAndroid.endTransaction();
        }
    }
    /**
     * 数据库查询数据
     */
    private StringBuilder showData(){
        StringBuilder content = new StringBuilder("");
        //获取数据库的游标,和SQLite相同
        Cursor cursor=ActiveAndroid.getDatabase().query(Cache.getTableName(Hero.class),null,null,null,null,null,null);
        int nameIndex=cursor.getColumnIndex("name");
        int typeIndex=cursor.getColumnIndex("type");
        int powerIndex=cursor.getColumnIndex("power");
        while (cursor.moveToNext()){
            Hero hero=new Hero();
            hero.name=cursor.getString(nameIndex);
            hero.type=cursor.getString(typeIndex);
            hero.power=cursor.getInt(powerIndex);
            content.append(hero.toString());
        }
        return content;
    }

    /**
     * 数据库删除数据
     */
    private void deleteData(){
        //Hero.delete(Hero.class,1);//删除id为1的记录
        new Delete().from(Hero.class).where("power>?",60).execute();//删除power大于60的所有记录
        Toast.makeText(MainActivity.this,"删除数据ok",Toast.LENGTH_SHORT).show();
    }
    /**
     * 数据库修改数据
     */
    private void updateData(){
        Hero hero=Hero.load(Hero.class,10);
        /**
         * load方法其实执行的是:
         * new Select()).from(type).where(tableInfo.getIdName() + "=?", new Object[]{Long.valueOf(id)}).executeSingle();
         * 即是先单条查询;
         * executeSingle()相当于limit(1);
         */
        hero.setName("杜甫");
        hero.save();
        Toast.makeText(MainActivity.this,"修改数据ok",Toast.LENGTH_SHORT).show();
    }
}</span>


   ActiveAndroid Jar包下载

  Demo源码下载




你可能感兴趣的:(数据库,sqlite,ActiveAndroid)