直接操作資料庫資料來為Openfire使用者添加好友,資料庫openfire

來源:互聯網
上載者:User

直接操作資料庫資料來為Openfire使用者添加好友,資料庫openfire
[size=large]openfire中實現好友添加及分組管理。


主要基於兩張table實現:ofroster,ofrostergroups。


ofroster:用於記錄好友關係(一對好友關係用兩條記錄來實現)
ofrostergroups:用於記錄好友分組


特別說明:openfire中使用者的主鍵是自然主鍵,也就是username。沒有使用自增ID。


我們先來看一下官方(http://www.igniterealtime.org/builds/openfire/docs/latest/documentation/database-guide.html)對 兩張表的描述:
ofRoster (好友名單) 
[table]
|列名 |類型 |長度 |描述 |
|rosterID |NUMBER |n/a |編號名冊(主鍵) |
|username |VARCHAR |32 |使用者名稱 |
|jid |TEXT |n/a |地址名冊入境 |
|sub |NUMBER |n/a |認購地位入境 |
|ask |NUMBER |n/a |賣出地位入境 |
|recv |NUMBER |n/a |檢舉表明進入名冊收到請求 |
|nick |VARCHAR |255 |暱稱分配給這個名冊入境 |
[/table]
ofRosterGroups (組的好友名單中的條目) 
[table]
|列名 |類型 |長度 |描述 |
|rosterID |NUMBER |n/a |名冊編號(主鍵) |
|rank |NUMBER |n/a |立場項(主鍵) |
|groupName |VARCHAR |255 |使用者定義的名稱,這個名冊組|
[/table]
看不太明白?不要著急,我們慢慢分析。


假設有使用者A,使用者B。


當A申請加B為好友時(例如:A將B加入好親人的分組中)。會在ofroster表中插入兩條記錄,


rosterID username jid sub ask recv nick


1 A 0 0 -1 B
2 B 0 -1 1 null


同時往ofrostergroups表中插入一條記錄


rosterID rank groupName


1 0 親人


這時B同意將A加為好友,並設定為家人分組中,那麼會修改ofroster表中剛插入的兩條記錄,如下所示:


rosterID username jid sub ask recv nick


1 A 1 -1 1 B
2 B 2 0 -1 null


同時往ofrostergroups表中插入一條記錄.


rosterID rank groupName


2 0 家人


到此為止,雙方的好友關係便建立起來。


疑問:1.若B不同意呢?則不做任何操作。下一次,若B加A為好友,將等同於執行同意的操作。


2.如何查詢某個人所有好友,和分組?


在ofroster中根據username便可獲得某個使用者的所有好友資訊。然後根據每條記錄的rosterid去ofrostergroups表中尋找分組的名稱即可。


3.當使用者添加一個空的好友分組時,ofrostergroups表是否插入一條記錄?


不插,測試發現並沒有實質的插入一條記錄,但使用者可以看到這個分組名稱,怎麼回事?推測可能是存放在session中。測試發現當使用者建立一個空的好友分組,然後下線,再上線時,發現該好友分組已消失。充分說明當好友分組為空白時,並沒有插庫。


下面說一下每個欄位所代表的含義:
askstatus
-1—  沒有掛起的添加好友請求。
     The roster item has no pending subscription requests.
 0— 有掛起的添加好友請求。
     The roster item has been asked for permission to subscribe to its presence but no response has been received.
1— 估計是有沒有回複的刪除請求吧
      The roster owner has asked the roster item to be unsubscribed from its presence notifications but hasn't yet received confi rmation.
recvstatus
-1— 已經回複添加好友請求
       There are no subscriptions that have been received but not presented to the user.
1— 接收到好友請求但是沒有給好友回複
       The server has received a subscribe request, but has not forwarded it to the user.
2— 估計是沒有回複刪除請求吧
      The server has received an unsubscribe request, but has not forwarded it to the user.
substatus
-1—  應該刪除這個好友
         Indicates that the roster item should be removed.
0—  沒有建立好友關係
        No subscription is established.
1—  使用者已經發出好友請求
        The roster owner has a subscription to the roster item’s presence.
2—  收到好友請求並且加對方好友
       The roster item has a subscription to the roster owner’s presence.
3—  好友已經相互添加
       The roster item and the owner have a mutual subscription.


知道了這些之後也就大體明白了添加好友的過程,下面就是我們代碼的操作[/size]
[code="java"]public static void main(String[] args) {  
 ResultSet rs = null;  
 Statement stmt = null;  
 Connection conn = null;  
 try {  
  Class.forName("oracle.jdbc.driver.OracleDriver");  
  //new oracle.jdbc.driver.OracleDriver();  
  conn = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.85:1521:ORCL", "test", "test");  
  stmt = conn.createStatement(); 
  //aaa與eee互加好友
  String sql="insert into OFROSTER values('30','eee','aaa@ppt03-20141024i','3','-1','-1','aaa')";
  stmt.execute(sql);
  String sql2="insert into OFROSTER values('31','aaa','eee@ppt03-20141024i','3','-1','-1','eee')";
  stmt.execute(sql2);
  //將aaa與eee放到Friend分組中
  String sql3="insert into OFROSTERGROUPS values('30','0','Friend')";
  stmt.execute(sql3);
  String sql4="insert into OFROSTERGROUPS values('31','0','Friend')";
  stmt.execute(sql4);
 } catch (ClassNotFoundException e) {  
       e.printStackTrace();  
    } catch (SQLException e) {  
       e.printStackTrace();  
    } finally {  
    try {  
      if(rs != null) {  
      rs.close();  
      rs = null;  
      }  
      if(stmt != null) {  
      stmt.close();  
      stmt = null;  
      }  
      if(conn != null) {  
      conn.close();  
      conn = null;  
      }  
} catch (SQLException e) {  
   e.printStackTrace();  
}  
    }  
}  [/code]
[size=large]這是我用JDBC直接操作資料庫的操作,一開始好像不行,後來我又添加了openfire官方提供的一個外掛程式:SubscriptionPlugin,這個外掛程式的主要實現自動添加了好友的功能。添加完成之後就可以了。
有什麼問題可以留言[/size]

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.