当前位置:文档之家› 聊天软件数据库设计

聊天软件数据库设计

每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库—SQLite。

SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了。

SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用SQLite来存储数据的。

首先,我们看一下api,所有数据库相关的接口、类都在android.database和android.database.sqlite两个包下。

1、SQLiteOpenHelper (android.database.sqlite.SQLiteOpenHelper)这是一个抽象类,关于抽象类我们都知道,如果要使用它,一定是继承它!这个类的方法很少,有一个构造方法SQLiteOpenHelper(android.content.Context context, ng.Stringname,android.database.sqlite.SQLiteDatabase.CursorFactory factory, int version);参数不做过多的解释,CursorFactory一般直接传null就可以public void onCreate(SQLiteDatabase db)此方法在创建数据库是被调用,所以,应该把创建表的操作放到这个方法里面,一会儿在后面我们会再详细的说如何创建表。

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)从方法名上我们就能知道这个方法是执行更新的,没错,当version改变是系统会调用这个方法,所以在这个方法里应该执行删除现有表,然后手动调用onCreate的操作SQLiteDatabase getReadableDatabase()获取可读的SQLiteDatabase对象SQLiteDatabase getWritableDatabase()获取可写的SQLiteDatabase对象2、SQLiteDatabase(android.database.sqlite.SQLiteDatabase)关于操作数据库的工作(增、删、查、改)都在这个类里execSQL(sql)执行SQL语句,用这个方法+SQL语句可以非常方便的执行增、删、查、改除此之外,Android还提供了功过方法实现增、删、查、改long insert(TABLE_NAME, null, contentValues)添加记录int delete(TABLE_NAME, where, whereValue)删除记录int update(TABLE_NAME, contentValues, where, whereValue) 更新记录Cursor query(TABLE_NAME, null, null, null, null, null, null) 查询记录除此之外,还有很多方法,如:beginTransaction()开始事务、endTransaction()结束事务...有兴趣的可以自己看api,这里就不多赘述了。

3、Cursor(android.database.Cursor)游标(接口),这个很熟悉了吧,Cursor里的方法非常多,常用的有:boolean moveToPosition(position)将指针移动到某记录getColumnIndex()按列名获取idint getCount()获取记录总数boolean requery()重新查询boolean isAfterLast()指针是否在末尾boolean isBeforeFirst()时候是开始位置boolean isFirst()是否是第一条记录boolean isLast()是否是最后一条记录boolean moveToFirst()、boolean moveToLast()、boolean mo veToNext()同moveToPosition(position)4、SimpleCursorAdapter(android.widget.SimpleCursorAdapter)也许你会奇怪了,之前我还说过关于数据库的操作都在database和database.sqlite 包下,为什么把一个Adapter放到这里,如果你用过Android的SQLite3,你一定会知道,这是因为我们对数据库的操作会经常跟列表联系起来。

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,yout.list,myCursor,new String[] {DB.TEXT1,DB. TEXT2},new int[]{ R.id.listTextView1,R.id.listTextView2 });myListView.setAdapter(adapter);一共5个参数,具体如下:参数1:Content参数2:布局参数3:Cursor游标对象参数4:显示的字段,传入String[]参数5:显示字段使用的组件,传入int[],该数组中是TextView组件的id 到这里,关于数据库的操作就结束了。

表结构数据库表结构设计方案User用户表(User(--用户表字段字段类型字段描述备注U_ID Int 主键、自增U_LoginID Varchar(20)(登陆账号)U_NickName Varchar(20)(昵称)U_PassWord Varchar(20)(密码)U_SignaTure Varchar(150)(个性签名) NullU_Sex Bit (性别) NullU_Birthday Datetime (生日) NullU_Telephone Varchar(30)(电话) NullU_Name Varchar(30)(真实姓名) NullU_Email Varchar(50)(邮箱) NullU_Intro Varchar(300)(简介) NullU_HeadPortrait Varchar(100)(头像)U_ShengXiao Char(2)生肖NullU_Age Int 年龄NullU_Constellation Char(6) 星座NullU_BloodType Varchar(10)血型NullU_SchoolTag Varchar(50)毕业学校NullU_Vocation Varchar(30)(职业)NullU_Nation ID Int (国家ID) 外键U_ProvinceID Int (省份ID)外键U_CityID Int (城市ID)外键U_FriendshipPolicy ID Int 好友策略ID 外键U_UserStateID Int (用户状态ID) 外键U_FriendPolicyQuestion Varchar(30) 好友策略问题NullU_FriendPolicyAnswer Varchar(30)好友策略答案NullU_FriendPolicyPassword Varchar(30)好友策略密码Null)UserState(--用户状态表字段字段类型字段描述备注US_ID Int (ID) 主键US _Name Varchar(10)(状态名字))Friends(--好友表)字段字段类型字段描述备注F_ID Int 主键ID 主键F_FirendID Int 朋友的ID 外键F_UserID Int 自己的ID 外键F_Name Varchar(30)备注昵称NullF_FriendGroupsID Int (所属分组ID) 外键User_FriendshipPolicy(--添加好友策略字段字段类型字段描述备注U_FP_ID主键Int 策略ID 主键U_FriendshipPolicy varchar 好友添加方式)FriendGroups(--好友分组表字段字段类型字段描述备注FG_ID Int (分组ID) 主键FG_Name Varchar (分组名字)FG_UserID Int 用户ID 外键)Messages(--聊天记录表字段字段类型字段描述备注M_ID Int (消息ID) 主键,自增M_PostMessages Text (消息内容)M_ status Bit (接收状态)M_Time Datetime (发送时间) 默认值M_ FromUserID Int (发送者ID)指向用户表外键M_ToUserID Int (接收者ID)指向用户表外键))Nation (--国家字段字段类型字段描述备注N_ID Int (国家ID) 主键N_Name Varchar(30)(名字))Province (--省份字段字段类型字段描述备注P_ID Int (省份ID)P_Name Varchar(30)(名字)P_NationID Int 所属国家ID 外键)City (--城市字段字段类型字段描述备注C_ID Int (城市ID)C_Name Varchar(30)(名字)C_ProvinceID Int 所属省份ID 外键)。

相关主题