创建项目数据库takeout.db,创建用户信息表
public class DBHelper extends OrmLiteSqliteOpenHelper {
private static DBHelper dbHelper;
private HashMap<String,Dao> hashMap = new HashMap<>();
private DBHelper(Context context) {
super(context, "takeout.db", null, 1);
}
/**
* @param ctx 上下文环境
* @return dbhelper对象
*/
public static synchronized DBHelper getInstance(Context ctx){
if (dbHelper == null){
dbHelper = new DBHelper(ctx);
}
return dbHelper;
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
try {
//创建数据库
TableUtils.createTable(connectionSource, UserInfo.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
}
/**
* @param clazz 类的字节码文件
* @return 字节码文件对于的dao对象,用于操作数据库
*/
public Dao getDao(Class clazz){
Dao dao = null;
String simpleName = clazz.getSimpleName();
dao = hashMap.get(simpleName);
if (dao == null){
try {
//存储相应对象
dao = super.getDao(clazz);
hashMap.put(simpleName,dao);
} catch (SQLException e) {
e.printStackTrace();
}
}
return dao;
}
@Override
public void close() {
for (String daoSimpleName: hashMap.keySet()) {
//将每一个daoSimpleName,至为空
Dao dao = hashMap.get(daoSimpleName);
dao = null;
}
}
}
2.2 用户信息javabean
@DatabaseTable(tableName = "t_user")
public class UserInfo {
@DatabaseField(id = true)
private int _id;
@DatabaseField()
private float balance;
@DatabaseField()
private float discount;
@DatabaseField()
private int integral;
@DatabaseField()
private String name;
@DatabaseField()
private String phone;
@DatabaseField()
private boolean isLogin;
.......
}
2.3 用户登陆与数据库相关逻辑
private void userLogin(UserInfo userInfo) {
androidDatabaseConnection = new AndroidDatabaseConnection
(dbHelper.getWritableDatabase(), true);
dao = dbHelper.getDao(UserInfo.class);
try {
//设置数据库操作回滚点
start = androidDatabaseConnection.setSavePoint("start");
//设置自动提交为否
dao.setAutoCommit(androidDatabaseConnection,false);
//查询所有用户
List<UserInfo> userInfoList = dao.queryForAll();
if (userInfoList!=null && userInfoList.size()>0){
//之前有用户登录过,存储了相关数据,将所有数据的登录状态设置为false
for (int i = 0; i < userInfoList.size(); i++) {
UserInfo user = userInfoList.get(i);
//修改数据库中的登录状态
user.setLogin(0);
//将修改后的状态更新到数据库中
dao.update(user);
}
}
//将指定id的用户登录状态设置为true
UserInfo userBean = dao.queryForId(userInfo.get_id());
if (userBean!=null){
//此用户之前登录过,只需要修改其登录状态即可
userBean.setLogin(1);
dao.update(userBean);
}else{
//此用户之前没有登录过,则需要插入一条新的数据,并且修改器状态
UserInfo userLogin = new UserInfo();
userLogin.setLogin(1);
userLogin.set_id(userInfo.get_id());
userLogin.setBalance(userInfo.getBalance());
userLogin.setDiscount(userInfo.getDiscount());
userLogin.setIntegral(userInfo.getIntegral());
userLogin.setPhone(userInfo.getPhone());
userLogin.setName(userInfo.getName());
dao.create(userLogin);
}
//提交事物
androidDatabaseConnection.commit(start);
//更新UI效果
} catch (SQLException e) {
e.printStackTrace();
if (androidDatabaseConnection!=null){
try {
//如果出现异常,则回滚到初始位置
androidDatabaseConnection.rollback(start);
} catch (SQLException e1) {
e1.printStackTrace();
}
}
}
}