在对账号进行操作的过程中,不可避免的会使用到数据库,存储相应的账号信息。本文结合SNS客户端项目简单讲述Android上有关数据库的部分操作。

Android上采用SQLite数据库,作为一款轻型数据库,它在Android上有着很好的表现,操作起来也十分简单。在这里也像大家推荐一款SQLite的可视化查看工具SQLite Database Browser。大家可以把Android设备中对应应用的数据库导出,并通过SQLite Database Browser查看数据库里的信息。

首先在Android上操作SQLite需要一个工具类,我们使用这个类来控制数据版本,打开数据库以及创建对应的数据表:

public class DBHelper extends SQLiteOpenHelper {private static final int VERSION = 1;private String create_usertb;private String create_contexttb;private String create_typetb;public DBHelper(Context context, String name, CursorFactory factory,int version) {super(context, name, factory, version);// TODO Auto-generated constructor stub}public DBHelper(Context context, String name, int version) {this(context, name, null, version);}public DBHelper(Context context, String name) {this(context, name, VERSION);}public DBHelper(Context context, String name, String create_usertb ) {this(context, name, VERSION);this.create_usertb = create_usertb;}@Overridepublic void onCreate(SQLiteDatabase db) {// TODO Auto-generated method stubdb.execSQL(create_usertb);// 生成用户信息表System.out.println("生成user表");}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {// TODO Auto-generated method stubSystem.out.print("数据库版本" + newVersion);db.execSQL(create_usertb);// 更新用户信息表System.out.println("生成user表");}}

然后我们在DBOperate中对数据库进行具体操作。

public class DBOperate {// 数据库名称SNSHelper// user表,weibotext表private static final String DB_NAME = "SNSHelper";private static final String CREATE_USERTB = "create table if not exists user"+ "(id INTEGER PRIMARY KEY AUTOINCREMENT,userid varchar(50),name varchar(20),type varchar(20),nickname varchar(20),"+ "access_token varchar(50),access_secret varchar(50),icon blob)";private Context context;public DBOperate(Context context) {this.context = context;}public Boolean initDB() {//初始化数据库,程序第一次启动时操作DBHelper dbhelper = new DBHelper(context, DB_NAME, CREATE_USERTB);SQLiteDatabase db = dbhelper.getReadableDatabase();if (db.isOpen()) {db.close();return true;} else {return false;}}public Long insertUser(ContentValues values) {//添加用户操作DBHelper dbhelper = new DBHelper(context, DB_NAME);SQLiteDatabase db = dbhelper.getReadableDatabase();Long row_id = db.insert("user", null, values);db.close();return row_id;}public Boolean isExist(ContentValues values) {//检查改用户是否存在List<UserInfo> userlist = new ArrayList<UserInfo>();userlist = findAllUser();for (int i = 0; i < userlist.size(); i++) {if (userlist.get(i).getAccess_secret().equalsIgnoreCase(values.get("access_secret").toString())&& userlist.get(i).getAccess_token().equalsIgnoreCase(values.get("access_token").toString())) {return true;}else{return false;}}if (userlist.size() == 0) {return false;} else {return true;}}public List<UserInfo> findAllUser() {//查找所有的用户List<UserInfo> userlist = new ArrayList<UserInfo>();DBHelper dbhelper = new DBHelper(context, DB_NAME);SQLiteDatabase db = dbhelper.getReadableDatabase();Cursor cursor = db.query("user", null, null, null, null, null,"id desc");cursor.moveToFirst();while ((!cursor.isAfterLast()) && (cursor.getString(1) != null)) {UserInfo user = new UserInfo();int id = cursor.getInt(cursor.getColumnIndex("id"));user.setId(id);String userid = cursor.getString(cursor.getColumnIndex("userid"));System.out.println("++++++++++" + userid + "+++++++++");user.setName(userid);String name = cursor.getString(cursor.getColumnIndex("name"));System.out.println("++++++++++" + name + "+++++++++");user.setName(name);String nickname = cursor.getString(cursor.getColumnIndex("nickname"));user.setNickname(nickname);String type = cursor.getString(cursor.getColumnIndex("type"));System.out.println("++++++++++" + type + "+++++++++");user.setType(type);String access_token = cursor.getString(cursor.getColumnIndex("access_token"));user.setAccess_token(access_token);String access_key = cursor.getString(cursor.getColumnIndex("access_secret"));user.setAccess_secret(access_key);ByteArrayInputStream stream = new ByteArrayInputStream(cursor.getBlob(cursor.getColumnIndex("icon")));Drawable icon = Drawable.createFromStream(stream, "img_" + name);user.setIcon(icon);userlist.add(user);cursor.moveToNext();}cursor.close();db.close();return userlist;}public UserInfo findUser(int ids) {//根据数据表中的id查找用户UserInfo user = new UserInfo();DBHelper dbhelper = new DBHelper(context, DB_NAME);SQLiteDatabase db = dbhelper.getReadableDatabase();Cursor cursor = db.query("user", null, "id=" + ids, null, null, null,null);Boolean isFind = cursor.moveToFirst();if (isFind) {int id = cursor.getInt(cursor.getColumnIndex("id"));user.setId(id);String name = cursor.getString(cursor.getColumnIndex("name"));user.setName(name);String userid = cursor.getString(cursor.getColumnIndex("userid"));user.setUserid(userid);String nickname = cursor.getString(cursor.getColumnIndex("nickname"));user.setNickname(nickname);String type = cursor.getString(cursor.getColumnIndex("type"));user.setType(type);String access_token = cursor.getString(cursor.getColumnIndex("access_token"));user.setAccess_token(access_token);String access_key = cursor.getString(cursor.getColumnIndex("access_secret"));user.setAccess_secret(access_key);ByteArrayInputStream stream = new ByteArrayInputStream(cursor.getBlob(cursor.getColumnIndex("icon")));Drawable icon = Drawable.createFromStream(stream, "img_" + name);user.setIcon(icon);cursor.close();db.close();return user;} else {db.close();return null;}}public int deleteUser(int num) {//根据数据表中id删除用户DBHelper dbhelper = new DBHelper(context, DB_NAME);SQLiteDatabase db = dbhelper.getReadableDatabase();int row = db.delete("user", "id=" + num, null);db.close();return row;}}

其中用到了UserInfo类用来表示用户包含用户相应的属性

public class UserInfo implements Serializable {private static final long serialVersionUID = 8825186846021795496L;private int id;// User表中的IDprivate String name;// 用户姓名private String nickname;private String userid;//网络中的idprivate Drawable icon;// 用户头像,用二进制字符串存储在数据库中private String type;// 用户类型,例如SINA,QQ,RENREN等private String access_token;// OAuth认证tokenprivate String access_secret;// OAuth认证key(secrete)public String getUserid() {return userid;}public void setUserid(String userid) {this.userid = userid;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}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 Drawable getIcon() {return icon;}public void setIcon(Drawable icon) {this.icon = icon;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getAccess_token() {return access_token;}public void setAccess_token(String access_token) {this.access_token = access_token;}public String getAccess_secret() {return access_secret;}public void setAccess_secret(String access_secret) {this.access_secret = access_secret;}}

注:将UserInfo序列化,是为了方便在后面的程序中通过Intent在不同Activity之间传递用户信息

更多相关文章

  1. Android联系人数据库全解析(2)
  2. 智能电视使用什么操作系统?
  3. Android数据库事务浅析
  4. 初学者关于学习android中关于实现用户输入内容有提示功能(AutoCom
  5. Android 的 SQLLite数据库
  6. Android中数据存储----SQLite数据库
  7. Android 开发判断用户是否安装微信和QQ并跳转过去
  8. Android SDCard操作(文件读写,容量计算)
  9. [android]android自动化测试十三之JavaMonkey跨APP操作

随机推荐

  1. 教你做android 上的google map 地图
  2. Android 获取系统设置参数。
  3. Android 7.1.2(Android N) Activity-Wind
  4. 用命令行编译APK(英文版)
  5. Android Studio 3.5.1 在项目的build.gra
  6. Windows下Eclipse 安装 android maven插
  7. android intent 传递各种结构数据
  8. Android 图片阴影处理分析!
  9. 【转】android好文章或博客地址收藏
  10. android 图文一起 textview SpannableStr