2017-05-20 2 views
-1

Je suis nouveau sur java. Je suis un tutoriel pour récupérer des images et d'autres données de DB à un jTable. J'ai 4 colonnes dans le db. Cela était censé afficher les données disponibles dans la base de données à jTable. Mais rien ne se passe. Pas même une erreur montre. J'ai ajouté tout mon code. Toute aide serait appréciée !java - Les résultats SQL ne s'affichent pas dans 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]; 
} 

} 

Méthode principale

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-) Pourquoi créez-vous une coutume 'Course' objet pour stocker les données, puis copier les données de cours à Tableau 2D? Pourquoi créez-vous un TableModel personnalisé qui contient simplement les données dans un tableau 2D? Il y a une nouvelle raison pour cela. Utilisez simplement DefaultTableModel. Vous pouvez lire les données du ResultSet directement dans le DefaultTableModel. Si vous allez prendre le temps de créer un objet 'Course' personnalisé et de lire les données dans l'objet, créez un TableModel approprié qui supporte l'objet' Course'. Vous avez reçu la solution dans votre dernière question. – camickr

Répondre

2

Je ne vois pas vous ajouter tous les cours à la liste dans l'extrait ci-dessous:

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) 
    }