在Android项目中或多或少的都会使用数据库,为了提高我们的开发效率,[b][color=red]当然少不了数据库ORM框架了,尤其是某些数据库操作特别频繁的app。[/color][/b]
下面开始介绍ORMLite的入门用法~

[size=medium][b]1、下载 ORMLite Jar[/b][/size]
首先去 ORMLite官网下载jar包,对于Android为:ormlite-android-4.48.jar 和 ormlite-core-4.48.jar ;

[color=red][size=medium][b]2、配置Bean类[/b][/size][/color]
有了jar,我们直接新建一个项目为:zhy_ormlite,然后把jar拷贝到libs下。
然后新建一个包:com.zhy.zhy_ormlite.bean专门用于存放项目中的Bean,首先新建一个User.java


package com.zhy.zhy_ormlite.bean;

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName = "tb_user")
public class User
{
@DatabaseField(generatedId = true)
private int id;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "desc")
private String desc;

public User()
{
}

public User(String name, String desc)
{
this.name = name;
this.desc = desc;
}

public int getId()
{
return id;
}

public void setId(int id)
{
this.id = id;
}

public String getName()
{
return name;
}

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

public String getDesc()
{
return desc;
}

public void setDesc(String desc)
{
this.desc = desc;
}

}



首先在User类上添加[color=red]@DatabaseTable(tableName = "tb_user")[/color],标明这是数据库中的一张表,标明为tb_user
然后分别在属性上添加[color=red]@DatabaseField(columnName = "name")[/color] ,columnName的值为该字段在数据中的列名
[color=red]@DatabaseField(generatedId = true)[/color] ,generatedId 表示id为主键且自动生成

[size=medium][b]3、编写DAO类[/b][/size]

原生的数据库操作,需要继承[color=blue]SQLiteOpenHelper[/color],这里我们需要继承[color=red]OrmLiteSqliteOpenHelper[/color],看代码:

package com.zhy.zhy_ormlite.db;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;

import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
import com.zhy.zhy_ormlite.bean.Article;
import com.zhy.zhy_ormlite.bean.Student;
import com.zhy.zhy_ormlite.bean.User;

public class DatabaseHelper extends OrmLiteSqliteOpenHelper
{
private static final String TABLE_NAME = "sqlite-test.db";

private Map daos = new HashMap();

private DatabaseHelper(Context context)
{
super(context, TABLE_NAME, null, 4);
}

@Override
public void onCreate(SQLiteDatabase database,
ConnectionSource connectionSource)
{
try
{
TableUtils.createTable(connectionSource, User.class);
TableUtils.createTable(connectionSource, Article.class);
TableUtils.createTable(connectionSource, Student.class);
} catch (SQLException e)
{
e.printStackTrace();
}
}

@Override
public void onUpgrade(SQLiteDatabase database,
ConnectionSource connectionSource, int oldVersion, int newVersion)
{
try
{
TableUtils.dropTable(connectionSource, User.class, true);
TableUtils.dropTable(connectionSource, Article.class, true);
TableUtils.dropTable(connectionSource, Student.class, true);
onCreate(database, connectionSource);
} catch (SQLException e)
{
e.printStackTrace();
}
}

private static DatabaseHelper instance;

/**
* 单例获取该Helper
*
* @param context
* @return
*/
public static synchronized DatabaseHelper getHelper(Context context)
{
context = context.getApplicationContext();
if (instance == null)
{
synchronized (DatabaseHelper.class)
{
if (instance == null)
instance = new DatabaseHelper(context);
}
}

return instance;
}

public synchronized Dao getDao(Class clazz) throws SQLException
{
Dao dao = null;
String className = clazz.getSimpleName();

if (daos.containsKey(className))
{
dao = daos.get(className);
}
if (dao == null)
{
dao = super.getDao(clazz);
daos.put(className, dao);
}
return dao;
}

/**
* 释放资源
*/
@Override
public void close()
{
super.close();

for (String key : daos.keySet())
{
Dao dao = daos.get(key);
dao = null;
}
}

}




1、整个DatabaseHelper使用单例只对外公布出一个对象,[color=red]保证app中只存在一个SQLite Connection[/color]
2、我们对每个Bean创建一个XXXDao来处理当前Bean的数据库操作,当然真正去和数据库打交道的对象,通过上面代码中的getDao(T t)进行获取
getDao为一个泛型方法,会根据传入Class对象进行创建Dao,并且使用一个Map来保持所有的Dao对象,只有第一次调用时才会去调用底层的getDao()。

[size=medium][b]4、Bean的Dao[/b][/size]



package com.zhy.zhy_ormlite.db;

import java.sql.SQLException;

import android.content.Context;

import com.j256.ormlite.dao.Dao;
import com.zhy.zhy_ormlite.bean.User;

public class UserDao
{
private Context context;
private Dao userDaoOpe;
private DatabaseHelper helper;

public UserDao(Context context)
{
this.context = context;
try
{
helper = DatabaseHelper.getHelper(context);
userDaoOpe = helper.getDao(User.class);
} catch (SQLException e)
{
e.printStackTrace();
}
}

/**
* 增加一个用户
* @param user
*/
public void add(User user)
{
try
{
userDaoOpe.create(user);
} catch (SQLException e)
{
e.printStackTrace();
}

}//...other operations


}



[size=medium][b]5.事务操作[/b][/size]


//事务操作
TransactionManager.callInTransaction(helper.getConnectionSource(),
new Callable()
{

@Override
public Void call() throws Exception
{
return null;
}
});


ORMLite下载地址:[url]http://ormlite.com/releases/[/url]


转自:[url]http://blog.csdn.net/lmj623565791/article/details/39122981[/url]

更多相关文章

  1. ListView的分割线属性操作
  2. Android_Android中屏幕相关的操作
  3. 【Android】Aidl使用详解(支持多个回调和传递自定义对象)
  4. Android 通过 Intent 传递类对象
  5. adb shell下查看sqlite数据库
  6. Android导入数据库
  7. Android 直接连MySQL数据库

随机推荐

  1. net.sf.json.JSONException: Found start
  2. 控制台在node . js中没有“debug”方法吗
  3. php从PostgreSQL 数据库检索数据,实现分页
  4. Nivoslider(在动态ajax内容中)不会在第一次
  5. Javascript警报中文本的颜色
  6. 如何将带有双引号反斜杠的JSON字符串转换
  7. jQuery分页插件jBootstrapPage,一个Bootst
  8. AngularJS身份验证和基于XSRF令牌
  9. js 处理url中文参数 java端接收处理
  10. How to learn js properly(week4)使用js建