2017-05-20 18 views
-1

私はjavaを使い慣れていません。私はjTableにdbから画像やその他のデータを取得するチュートリアルに従っています。私はdbに4列あります。これは、利用可能なデータをdb to 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配列? 2D配列のデータを保持するカスタムTableModelを作成するのはなぜですか?これを行う新しい理由があります。単にDefaultTableModelを使用してください。 ResultSetから直接DefaultTableModelにデータを読み込むことができます。カスタム 'Course'オブジェクトを作成し、そのオブジェクトにデータを読み込む時間を取る場合は、' Course'オブジェクトをサポートする適切な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) 
    } 
関連する問題