李慶江
(菏澤學院 教務處,山東 菏澤 274015)
服務器使用Client/Server[1]通訊原理,通過它可以充分利用兩端硬件環境的優勢,將任務合理分配到 Client端和Server端來實現,降低了系統的通訊開銷。總體結構系統的模塊結構包括消息管理模塊、團隊管理模塊和任務管理模塊。
1.2.1 頂層處理流
手機端通過移動網絡把指令上傳的服務器,服務器對指令進行處理后返回XML形式的數據,手機端對返回的數據進行解析。
1.2.2 第一層處理流
1)登錄子系統
手機通過移動網絡,發送用戶名密碼信息到服務器端,服務器接受到信息后調用數據庫核對信息,核對后把True和False信息返回,手機隊返回數據解析得到登錄驗證是否成功。
2)管理子系統
手機用戶登錄成功后,進入管理子系統,可以調用進行消息管理、團隊管理和任務管理三個第二層模塊。
1.2.3 第二層處理流
1)消息管理流程
首先進行用戶驗證,通過驗證后可進行查看消息、刪除消息、發送消息。
2)認證加入團隊流程
首先進行用戶驗證,通過驗證后可進行認證/通過、加入團隊申請。
3)團隊管理流程
首先進行用戶驗證,通過驗證后可進行新建、解散、退出和編輯團隊。
4)團隊成員查看流程
首先進行用戶驗證,通過驗證后,通過用戶ID和團隊ID在團隊和用戶管理表中查找到團隊用戶成員,然后將查詢到的數據返回。
5)剔除團隊成員
首先進行用戶驗證是否為隊長,且這個要剔除的成員是否為該團隊的成員,通過驗證后,就對團隊用戶關聯表中把關聯要刪除的ID進行刪除,最后返回成功信息,否則返回不成功信息。
6)查看團隊個人任務列表流程
首先進行用戶驗證,驗證該用戶是否為該團隊的成員,通過驗證后在數據庫中查找到該團隊任務信息,然后將查詢到的數據返回。
7)任務管理流程
首先進行用戶驗證,驗證該用戶是否為要修改任務的任務擁有人,通過驗證后可進行任務查看、撤銷、完成、更新狀態。
服務器判斷會員是否已申請過加入該組,服務器得到用戶提交的信息,搜索表中是否存在該用戶,如果存在則返回true,否則返回flase,并進行異常處理,在操作結束后,關閉數據庫的連接,以保證數據的安全。接收并添加文件,當用戶欲添加文件時,先判斷該用戶是否是該隊成員,并作出判斷,提示用戶,如果是該隊成員,接著判斷剩余空間的大小是否充足,并作出判斷。判斷團隊人數是否已滿,通過傳遞的隊號和隊伍的人數,判斷隊伍是否超過最大人數,并作出判斷,返回參數。
服務器端主要接口通過XML方式傳送數據。
1)用戶接口
采用自己重寫顯示的Android組件和Android的標準顯示組件等。
2)硬件接口
手機物理或虛擬鍵盤。
3)軟件接口
通過手機無線借入互聯網,xml文件形式進行數據交互、通過JDBC對MYSQL[2]數據庫的連接。
通過面向對象語言設計類,在public類中實現調用,類間實現嚴格封裝。
系統中數據庫采用android內置SQLite數據庫和MySQL[3]數據庫。
以記錄集合作為操作對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為SQL語句的輸入,所以SQL語句可以嵌套,這使他具有極大的靈活性和強大的功能,在多數情況下,在其他語言中需要一大段程序實現的功能只需要一個SQL語句就可以達到目的,這也意味著用SQL語言可以寫出非常復雜的語句。
SQLite數據庫是一款輕型的數據庫,是遵守ACID的關聯式數據庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。
3.3.1 手機端
主要使用了Android內置sqllite數據庫技術,主要對數據庫操作,全都調用這個類中的具體靜態方法來對數據庫進行添刪改查操作。在Android平臺上,集成了一個嵌入式關系型數據庫—SQLite,SQLite3 支持 NULL、INTEGER、REAL(浮點數字)、TEXT(字符串文本)和BLOB(二進制對象)數據類型,雖然它支持的類型雖然只有五種,但實際上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等數據類型,只不過在運算或保存時會轉成對應的五種數據類型。SQLite最大的特點是你可以保存任何類型的數據到任何字段中,無論這列聲明的數據類型是什么。例如,可以在Integer字段中存放字符串,或者在布爾型字段中存放浮點數,或者在字符型字段中存放日期型值。但有一種情況例外:定義為INTEGER PRIMARY KEY的字段只能存儲64位整數,當向這種字段中保存除整數以外的數據時,將會產生錯誤。另外,SQLite在解析CREATE TABLE語句時,會忽略 CREATE TABLE語句中跟在字段名后面的數據類型信息,如下面語句會忽略 name字段的類型信息,主要代碼如下:
public static List<Massage>select(String pid,int maxmid,Connection conn){PreparedStatement pstmt=null;
ResultSet rs=null;
String where="where mid>?and massage.sender=member.pid and massage.tid=team.tid";
where+="and(type=0 or(massage.type=3 and team.tid in (select relevance.tid from relevance,team where relevance.tid=team.tid and relevance.pid=team.pid and relevance.pid=?))";
where+="or(massage.type < 2 and team.tid in(select tid from relevance where pid=?)))order by mid DESC";
List<Massage>massages=new ArrayList<Massage>();
try{String sql="select mid,massage.sender,member.name,massage.tid,team.name,title,content,time,type,team.pid from massage,member,team"+where;
pstmt=conn.prepareStatement(sql);
pstmt.setInt(1,maxmid);pstmt.setString(2,pid);
pstmt.setString(3,pid);rs=pstmt.executeQuery();
while(rs.next()){Integer mid=rs.getInt(1);String sender=rs.getString(2).trim();
String sname=rs.getString(3).trim();Integer tid=rs.getInt(4);String tname=rs.getString(5).trim();String title=rs.getString(6).trim();
String content=rs.getString(7).trim ();Date time=rs.getTimestamp(8);
Short type=rs.getShort(9);String tpid=rs.getString(10);
massages.add(new Massage(mid,sender,sname,tid,tname,title,content,time,type,tpid));}return massages;}catch(SQLE xception ex){
System.out.println("SQLException:"+ex.getMessage());
System.out.println("SQLState:"+ex.getSQLState());
System.out.println("VendorError:"+ex.getErrorCode());return massages;}finally{try{if(rs!=null){rs.close();
rs=null;}if(pstmt!=null){pstmt.close();pstmt=null;}}catch(SQLException e){e.printStackTrace();}}
3.3.2 服務器端
用戶管理、消息管理和團隊管理業務Bean,分別對不同的模塊進行數據的操作,其中有對數據庫的具體操作的方法,主要代碼如下。
public Member getOneMember(String pid,String passwd){
Cursor cursor=db.rawQuery("select*from member where_id=?",new String[]{pid});
Member member=null;
if(cursor.moveToFirst()){member=new Member(pid,null,cursor.getString(2),cursor.getShort(3),cursor.getString(4),cursor.getString(5),cursor.getString(6),cursor.getString(7),cursor.getString(8),Timestamp.valueOf(cursor.getString(9)));cursor.close();}return member;}
[1]Alistair Cockburn.敏捷軟件開發[M].機械工業出版社,2000.8:197-289.
[2]公磊.周聰.基于Android的移動終端應用程序開發與研究[J].計算機與現代化,2008(8):85-89.
[3]高煥堂.Android應用框架原理與程式設計[M]//36技.Google公司,2008:132-150.