在对账号进行操作的过程中,不可避免的会使用到数据库,存储相应的账号信息。本文结合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;
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(create_usertb);// 生成用户信息表
System.out.println("生成user表");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
System.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表中的ID
private String name;// 用户姓名
private String nickname;
private String userid;//网络中的id
private Drawable icon;// 用户头像,用二进制字符串存储在数据库中
private String type;// 用户类型,例如SINA,QQ,RENREN等
private String access_token;// OAuth认证token
private 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之间传递用户信息
分享到:
相关推荐
Android:SNS客户端开发八:发送带图片的微博 第一种方法
报报告:SNS在中国的机会及未来发展趋向报报告:SNS在中国的机会及未来发展趋向
基于安卓Android的SNS社交网络客户应用需求调研报告范本.pdf基于安卓Android的SNS社交网络客户应用需求调研报告范本.pdf基于安卓Android的SNS社交网络客户应用需求调研报告范本.pdf基于安卓Android的SNS社交网络客户...
电子商务案例分析:SNS平台案例.ppt
Android的SNS App源码,内容自己看哈,互相交流学习下
SNS社交网站数据库设计[归纳].pdf
人人都玩开心网:Ext+JS+Android+SSH整合开发Web与移动SNS
开心网CEO程炳皓:SNS的3个方向.docx
大型SNS网站数据库设计
NoSQL数据库 14信管一班2组23殷月园 NoSQL数据库PPT全文共20页,当前为第1页。 内容大纲 定义 产生 共同特征 分类 适用场景 发展现状 7 挑战 NoSQL数据库PPT全文共20页,当前为第2页。 一.什么是NoSQL数据库? NoSQL...
我的第二个android sns应用程序。 与相比,此应用程序是升级版本。 잭트는 진화된잭트NS NS케케케케케NS NS NS。 。른른。구현했습니구현했습니구현했습니구현했습니。 목차 기술스택 언어: Java,PHP,...
SNS社交网站数据库详细设计,对社交网站开发有帮组
本人在12年7月份研究android如何与SNS网站接入时写的备忘录,主要信息也是收集于各SNS网站的接入开发说明,然后加以精简,希望节省大家时间,对大家有帮助。主要网站包括开心网、腾讯微博、新浪微博、人人网。
Android经典开发---豆瓣网移动客户端 讲解+源代码
基于安卓Android的SNS社交网络客户应用需求调研报告范本.docx基于安卓Android的SNS社交网络客户应用需求调研报告范本.docx基于安卓Android的SNS社交网络客户应用需求调研报告范本.docx基于安卓Android的SNS社交网络...
它是支持ActivityPub的分布式SNS的客户端。 如何使用 您可以通过输入分布式SNS的实例地址并登录来使用它。 支持的操作系统 Windows10 64位 对于Mac和Linux,我们将尽快制作兼容版本。 (也许) 更新记录 1.0.0第一...
gyzooxx源码这是一个完整的安卓客户端+J2EE服务端+数据库项目。系统功能基本完善,安卓利用了开心网的界面开发,功能包括:登陆,注册,图片处理上传,图片效果制作截取等完整功能,本地SQLLite数据库存储,附近的人...
Caokun.Net:trade_mark: SNS:开源社交网络服务软件,PHP + MySQL编写
本软件是一款android的拼车聊天的社交软件的客户端,功能包括拼车,查找好友,查找附近的人,聊天和sns等功能。整个工程是在intellij IDAE下开发的。与服务端通过http+json进行通讯交互。想学习移动互联网的朋友可以...
python 连接数据库操作, 方法如下: 在本机的mysql 数据库中有一个名为yao的库,其中有一个名为user的表,表中的内容如图 下面,则是python连接数据库的方法,及查找出表中的内容,代码如下: #! /usr/bin/python #...