2014-03-30 173 views
-1

我從樹形圖填充我的表格,並且樹形圖正從我的sql數據庫填充,錯誤是數據出現在我的表格中的順序。 我發佈了一個截圖給你看。JTable沒有填充正確的信息

enter image description here

,這裏是從我的SQL

enter image description here

public class LibraryData { 

    private Connection con; 
    private Statement stmt; 
    private ResultSet res; 

    public LibraryData() { 
     try { 

      // con = DriverManager.getConnection("jdbc:mysql://;localhost:3306") 
      String connectionUrl = "jdbc:sqlserver://SQL-SERVER;" + "databaseName=oe323;integratedSecurity=true;"; 
      Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      con = DriverManager.getConnection(connectionUrl); 
     } catch (Exception ex) { 
      System.out.println("Erro: " + ex); 

     } 
    } 

    public String listAll1() { 
     String output = ""; 
     try { 
      stmt = con.createStatement(); 
      res = stmt.executeQuery("SELECT * FROM LibraryTable"); 

      while (res.next()) { // there is a result 
       // the name field is the thrid one in the ResultSet 
       // Note that with ResultSet we count the fields starting from 1 
       output += res.getString(1) + " " + res.getString(2) + " - " 
         + res.getString(3) + " " + res.getString(4) + " " 
         + res.getString(5) + "\n"; 
       System.out.println(output); 
       library.put("" + res.getInt(1), new Item(res.getString(2), res.getString(3), Integer.parseInt(res.getString(4)))); 



      } 
     } catch (Exception e) { 
      System.out.println(e); 
      return null; 
     } 
     return output; 
    } 

    public static class Item { 

     Item(String n, String a, int r) { 
      name = n; 
      artist = a; 
      rating = r; 
     } 
     // instance variables 
     private String name; 
     private String artist; 
     private int rating; 
     private int playCount; 

     public String toString() { 
      return name + " - " + artist; 
     } 
    } 
    private static Map<String, Item> library = new TreeMap<String, Item>(); 
// 

    static { 

    } 

    public static String listAll() { 
     String output = ""; 
     Iterator iterator = library.keySet().iterator(); 
     while (iterator.hasNext()) { 
      String key = (String) iterator.next(); 
      Item item = library.get(key); 
      output += key + " " + item.name + " - " + item.artist + "\n"; 


     } 
     return output; 
    } 

    public static void fillTable() { 
     Iterator iterator = LibraryData.library.keySet().iterator(); 
     while (iterator.hasNext()) { 
      String key = (String) iterator.next(); 
      LibraryData.Item item = LibraryData.library.get(key); 

      DeleteSong.data = new Object[1][3]; 

      DeleteSong.data[0][0] = key; 
      DeleteSong.data[0][1] = item.artist; 

      DeleteSong.data[0][2] = item.name; 
      DeleteSong.modeltable.addRow(DeleteSong.data[0]); 


     } 

    } 

    public static void fillTable1() { 
     // listAll1(); 
     Iterator iterator = LibraryData.library.keySet().iterator(); 
     while (iterator.hasNext()) { 
      String key = (String) iterator.next(); 
      LibraryData.Item item = LibraryData.library.get(key); 

      CheckLibrary.data = new Object[1][4]; 

      CheckLibrary.data[0][0] = key; 
      CheckLibrary.data[0][1] = item.artist; 

      CheckLibrary.data[0][2] = item.name; 
      CheckLibrary.modeltable.addRow(CheckLibrary.data[0]); 

      CheckLibrary.data[0][3] = item.rating; 
+0

也許你忘了在表格中添加藝術家名字了嗎?所有其他列都顯示在錯誤的地方。如果有些顯示一些代碼 –

+0

只是意識到藝術家和曲目名稱是錯誤的方式,特別是你想看到什麼代碼的一部分 – Reynolds

+1

相關的代碼,代碼顯示我們你的錯誤。 –

回答

1

圖像的問題是你的鑰匙實際上是數字,你期待他們在數字順序進行排序,但您的library鍵是String s,按字典順序排序,例如1,10,11,12,13,14,15,16,17,18,19,2,20 ......(就像a,aa,ab,ac,ad,b,ba,bb ,bc,...)。這個順序在你的屏幕截圖中很明顯。

這是因爲,由於某種原因,你決定你的整數鍵轉換爲字符串的庫圖放置時:

private static Map<String, Item> library = new TreeMap<String, Item>(); 
... 
// in listAll1() and elsewhere: 
library.put("" + res.getInt(1), ... 

您應該使用適合你的信息數據類型存儲。如果你的鑰匙是整數,使用整數,例如:

private static Map<Integer, Item> library = new TreeMap<Integer, Item>(); 
... 
// in listAll1() and elsewhere: 
library.put(res.getInt(1), ... 

你有一個截屏的顯示這一點,但沒有代碼。然後你添加了代碼,但刪除了屏幕截圖。我添加了回到你的問題的屏幕截圖。將來,請嘗試發佈與您看到的問題直接相關的代碼和信息。

+0

我記下了你所說的,但在我的情況下,我使用的是字符串和整數值 – Reynolds

+0

@Reynolds不,你使用'String'作爲'library'中的鍵。當你將整數存儲在那裏時,你明確地將整數轉換爲一個字符串。一個'TreeMap'鍵集以鍵的自然順序迭代。 String的自然順序是按字母順序排列的。不要緊,你的字符串包含數字字符0-9而不是字母。字符串中的數字仍然是一個字符串。使用正確的數據類型。使用'Integer'作爲您的地圖鍵類型。 「Integer」的自然排序順序按數字順序排列。然後'keySet()'迭代將以適當的數字順序完成。 –

+0

如果您堅持使用字符串,另一種方法是在執行整數 - >字符串轉換時,通過在字符串前添加前導0來將鍵字符串填充到固定長度。 「002」將在「019」之前排序。只要確保前置足夠的前導0來覆蓋整個有效的ID範圍。不過,我建議使用準確表示信息的數據類型。 –