2017-05-20 52 views
-1

我是新來的java。我正在學習一個教程,從db到jTable中檢索圖像和其他數據。我有4列的數據庫。這應該顯示數據庫中的可用數據到jTable。但沒有任何事情發生。甚至沒有出現錯誤。我已經添加了我的所有代碼。任何幫助,將不勝感激 !java-sql結果不顯示在jTable中

Course.java

package my.welcomescreen; 


public class Course { 
    private int id; 
    private String name; 
    private byte[] imag; 
    private String desc; 

public Course(){} 

public Course(int Id, String Name, byte[] image, String description){ 
    this.id = Id; 
    this.name = Name; 
    this.imag = image; 
    this.desc = description; 
} 

public int getID(){ 
    return id; 
} 

public void setID(int ID){ 
    this.id = ID; 
} 

public String getName(){ 
    return name; 
} 

public void setName(String Name){ 
    this.name = Name; 
} 

public byte[] getImage(){ 
    return imag; 
} 

public String getDesc(){ 
    return desc; 
} 

public void setDesc(String Description){ 
    this.desc = Description; 
} 
} 

MainQuery.java

package my.welcomescreen; 

import java.sql.Connection; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.sql.Statement; 
import java.util.ArrayList; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

public class MainQuery { 

    public ArrayList<Course> BindTable(){ 
    ArrayList<Course> list = new ArrayList<Course>(); 
    db databaseCon = new db(); 
    Connection dbconnect = db.dbconnect(); 
    Connection con = databaseCon.dbconnect(); 
    Statement st; 
    ResultSet rs; 

    try{ 
     st = con.createStatement(); 
     String sql = "select id,name,img,description from courses"; 
     rs = st.executeQuery(sql); 

     Course c; 
     while(rs.next()){ 
      c = new Course(
          rs.getInt("id"), 
          rs.getString("name"), 
          rs.getBytes("img"), 
          rs.getString("description") 
          ); 

     } 

    } catch (SQLException ex) { 
     Logger.getLogger(Admin_Panel.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    return list; 

    } 


} 

TheModel.java

package my.welcomescreen; 

import javax.swing.Icon; 
import javax.swing.table.AbstractTableModel; 


public class TheModel extends AbstractTableModel { 

    private String[] columns; 
    private Object[][] rows; 

    public TheModel(){} 

    public TheModel(Object[][] data, String[] columnName){ 
     this.rows = data; 
     this.columns = columnName; 
    } 

    public Class getColumnClass(int Column){ 
     if(Column == 2){ 
      return Icon.class; 
     } else { 
      return getValueAt(0,Column).getClass(); 
     } 
    } 


    public int getRowCount() { 
     return this.rows.length; 
    } 


    public int getColumnCount() { 
     return this.columns.length; 
    } 


public Object getValueAt(int rowIndex, int columnIndex) { 
    return this.rows[rowIndex][columnIndex]; 
} 

public String getColumnName(int col){ 
    return this.columns[col]; 
} 

} 

主要方法

public void displayJTable(){ 
    MainQuery mq = new MainQuery(); 
    ArrayList<Course> list = mq.BindTable(); 
    String[] columnName = {"Id","Course Name","Image","Description"}; 
    Object[][] rows = new Object[list.size()][3]; 
    for(int i = 0; i < list.size(); i++){ 
     rows[i][0] = list.get(i).getID(); 
     rows[i][1] = list.get(i).getName(); 

     if(list.get(i).getImage() != null){ 

     ImageIcon image = new ImageIcon(new ImageIcon(list.get(i).getImage()).getImage() 
     .getScaledInstance(150, 120, Image.SCALE_SMOOTH)); 

     rows[i][2] = image; 
     } 

     rows[i][3] = list.get(i).getDesc(); 
    } 

    TheModel model = new TheModel(rows, columnName); 
    jTable1.setModel(model); 
    jTable1.setRowHeight(120); 
    jTable1.getColumnModel().getColumn(3).setPreferredWidth(150); 


} 
+0

(1)爲什麼要創建自定義'Course'對象來保存數據,然後將掃描數據複製到2D陣列?你爲什麼要創建一個自定義的TableModel,它只是將數據保存在一個2D數組中。有一個新的理由來做到這一點。只需使用DefaultTableModel即可。您可以直接從ResultSet中讀取數據到DefaultTableModel中。如果您要花時間創建自定義的「課程」對象並將數據讀入對象,則創建一個支持「課程」對象的適當TableModel。你在哪裏給你最後一個問題的解決方案。 – camickr

回答

2

我沒有看到你每門課程添加到列表在下面的代碼片段:

Course c; 
    while(rs.next()){ 
     c = new Course(
         rs.getInt("id"), 
         rs.getString("name"), 
         rs.getBytes("img"), 
         rs.getString("description") 
         ); 
     // this line below should be added 
     list.add(c) 
    }