- UID
 - 72773
 
- 閱讀權限
 - 20
 
- 主題
 - 13
 
- 帖子
 - 68
 
- 精華
 - 5
 
- A幣
 - 216 
 
- 在線時間
 - 164 小時
 
- 最後登錄
 - 2025-1-26
 
 
 
 
 
初窺門道 
  
	- 主題
 - 13
 
	- 帖子
 - 68
 
	- 精華
 - 5
 
	- 綜合社群主題發文量
 - 0 
 
	- 電玩社群主題發文量
 - 0 
 
	- 娛樂社群主題發文量
 - 0 
 
	- 技術社群主題發文量
 - 13 
 
	- 閱讀權限
 - 20
 
	- 註冊時間
 - 2019-8-9
 
 
 
 
TA的每日心情  | 衰 2021-6-8 20:12 | 
|---|
 
  簽到天數: 14 天 連續簽到: 0 天 [LV.3]偶爾看看II 
 
 | 
 
 本帖最後由 a894985459 於 2023-8-7 23:01 編輯  
 
有事沒事發點基礎教學文 
刷個存在感 
 
今天的主題 
Java撈取SQL資料後,將其變成Object型態 
看主題似乎很難對吧? 
其實很簡單,Object型態類似多維陣列 
前置工程量比陣列麻煩 
但實用性比多維陣列更好 更容易操作 
 
讓我們開始今天的教學吧 
 
首先必須先決定你要撈什麼資料表的什麼資料 
打個比方 
 
我想弄一個可以把CDK獎勵發送到信箱的功能 
關於CDK可以看這篇 
 
那麼我就必須建立一個新的資料表 
大置上結構如下 
 
 
accid = 遊戲帳號 
itemid = 物品id 
count  = 數量 
text = 顯示說明文本 
id = 流水號(要設定自動遞增) 
 
結構上了解了對吧? 
讓我們回到語法 
 
- public List<Object> getAllGameMail(int id) {//取得帳號下100件信箱物品
 
  
-         Connection con = DatabaseConnection.getConnection();
 
 -         try {
 
 -             List<Object> mailbox = new ArrayList<Object>();
 
 -             Mail mail = null;
 
 -             PreparedStatement ps = con.prepareStatement("SELECT * FROM game_mail WHERE accid = ? order by id desc limit 0, 100");
 
 -             ps.setInt(1, id);
 
 -             ResultSet rs = ps.executeQuery();
 
 -             while (rs.next()) {
 
 -                   mail = new Mail(rs.getInt("itemid"), rs.getInt("count"), rs.getString("text"));
 
 -                   mailbox.add(mail);
 
 -             }
 
 -             rs.close();
 
 -             ps.close();
 
 -             return mailbox;
 
 -         } catch (Exception Ex) {
 
 -             Ex.printStackTrace();
 
 -             return null;
 
 -         }
 
 -     }
 
  複製代碼 
我們來分段講解 
連結資料庫部分語法就不多做說明了 
講重要的部分 
 
不管任何形態 我們都必須先給其定義 
先宣告 這是一個空集合的Object 
 
 
迴圈內丟你想要放進集合的各種資料 
- mail = new Mail(rs.getInt("itemid"), rs.getInt("count"), rs.getString("text"));
 
  複製代碼 像我就要把itemid、count、text丟進集合裡面 
 
 
最後再把資料丟進物件內 
 
 
好,到這邊一定會一堆紅線,不要緊張 
我們來創建一個新的Class給你要的物件集合使用 
 
- public class Mail {
 
 -     private String text;
 
 -     private int accid,itemid,count;
 
  
-     public int getAccid() {
 
 -         return accid;
 
 -     }
 
 -     
 
 -     public int getItemid() {
 
 -         return itemid;
 
 -     }
 
  
-     public int getCount() {
 
 -         return count;
 
 -     }
 
 -     
 
 -     public String getText () {
 
 -         return text;
 
 -     }
 
 -     
 
 -     Mail(final int itemid, final int count ,final String text) {
 
 -         this.itemid = itemid;
 
 -         this.count = count;
 
 -         this.text = text;
 
 -     }
 
 - }
 
  複製代碼 
 
由於是一個全新的物件集合 
所以必須創建一個新的區塊給這個集合使用 
最重要的是 
- Mail(final int itemid, final int count ,final String text) {
 
 -         this.itemid = itemid;
 
 -         this.count = count;
 
 -         this.text = text;
 
 -     }
 
  複製代碼 這一段必須跟你的資料庫語法符合 
 
說到這邊我想有點基礎的人都應該搞懂了 
 
置於語法使用看這邊 
- cm.getAllGameMail(accid)[數字].getItemid()
 
 - cm.getAllGameMail(accid)[數字].getCount()
 
 - cm.getAllGameMail(accid)[數字].getText()
 
  複製代碼 
沒搞懂嗎? 
 
由於腳本的關係 
所以我們要思考的是如何取值出來 
 
由於我們不是存變數的關係 
所以在語法使用的時候是直接呼叫才撈資料 
因此 得出來的結果會是一個集合 
而下面的資料是子集合相當於一個List 
 
因此語法是直接去調用子集合 讓他直接把你要的值show出來 
 
大概寫一下結構,會是這樣 
- function getAllGameMail() { //信箱
 
 -     var SendStr = "";
 
 -         for (var c = 0;c < cm.getAllGameMail(2).length; c++) {
 
 -             SendStr += "#i" + (cm.getAllGameMail(2)[c].getItemid())+ "##t" + (cm.getAllGameMail(2)[c].getItemid()) + "# X" + (cm.getAllGameMail(2)[c].getCount()) + "\r\n#e" + (cm.getAllGameMail(2)[c].getText()) + "#k#n\r\n";
 
 -         }
 
 -     return SendStr;
 
 - }
 
  複製代碼 
然後使用就自己調整就好了 
 
結果會像這樣 
 
 
 
如何,是不是很簡單呢? 
 
 |   
 
 
 
 |