kapamarous Δημοσ. 18 Ιουλίου 2010 Δημοσ. 18 Ιουλίου 2010 καλημερα σας . Έχω μια class (MySqlTableModel) που κανει extends την AbstractTableModel. Class MysqlTableModel >import java.sql.Connection; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.Statement; import java.util.Vector; import javax.swing.table.AbstractTableModel; /** * * @author root */ public class MySqlTableModel extends AbstractTableModel { Connection connection; Vector rows , data; Vector columns=null; String username_desc = null; String query = "SELECT p.product_id,p.code,p.model,ca.description," + "p.price,p.description,co.description " + "FROM companies co,categories ca,products p WHERE p.category_id=ca.categories_id " + "AND p.company_id = co.companies_id"; public MySqlTableModel(Connection conne, String username_description) { connection = conne; username_desc = username_description; initVectors(); } public void initVectors() { if (username_desc == "admin_user") { try { Statement state = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); ResultSet rs = state.executeQuery(query); ResultSetMetaData rsMeta = rs.getMetaData(); int metaSize = rsMeta.getColumnCount(); columns = new Vector(metaSize); System.out.println("The lenght of the columns are :" + metaSize); for (int i = 1; i <= metaSize; i++) { columns.add(rsMeta.getColumnName(i)); } data = new Vector(); //boolean next = while (rs.next()) { rows = new Vector(metaSize); for (int i = 1; i <= metaSize; i++) { rows.add(rs.getObject(i)); } data.addElement(rows); } rs.close(); state.close(); } catch (Exception ex) { ex.printStackTrace(); } } else { javax.swing.JOptionPane.showMessageDialog(null, "User is simple user"); } } public int getRowCount() { return rows.size(); } public int getColumnCount() { return columns.size(); } public Object getValueAt(int rowIndex, int columnIndex) { Vector v = (Vector)data.get(rowIndex); return v.elementAt(columnIndex); //return null; } public String getColumnName(int column) { return (String) columns.get(column); } public boolean isCellEditable(int rowIndex, int columnIndex) { return false; } public void setValueAt(Object aValue, int rowIndex, int columnIndex) { rows.set(rowIndex, aValue); fireTableCellUpdated(rowIndex, columnIndex); } public Class getColumnClass(int c) { return getValueAt(0, c).getClass(); } } Ο compiler δειχνει οτι εχει προβλημα η void getValueAt(int rowIndex, int columnIndex) και συγγκεκριμενα η γραμμη με τα bold με το exception java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 2.στην βαση αυτην την στιγμη υπαρχουνε 2 εγγραφες. > public Object getValueAt(int rowIndex, int columnIndex) { [b]Vector v = (Vector)data.get(rowIndex);[/b] return v.elementAt(columnIndex); //return null; } Καθε βοηθεια θα ητανε πολυτιμη .Ευχαριστω εκ των προτερων .
Evgenios1 Δημοσ. 18 Ιουλίου 2010 Δημοσ. 18 Ιουλίου 2010 Καλημερα. Στο λεει το exception, ζητας κατι το οποιο δεν υπαρχει. Βαλε breakpoint στην while (εκει που γεμιζει ο vector) να δεις τι παιζει. Αλλιος περιμενε καναν που ξερει απο java να απαντηση.
bnvdarklord Δημοσ. 18 Ιουλίου 2010 Δημοσ. 18 Ιουλίου 2010 Δεν μπορω να το δοκιμάσω τωρα για να σου πώ σιγουρα τι παιζει αλλά αυτό το exception σημαινει οτι πας να παρεις μια τιμή απο το Vector που δεν υπάρχει(οπως ειπε και ο Evgenios1). Στον κώδικα που χρησιμοποιείς την κλάση αυτή(και δεν εχεις ποστάρει), λογικα θα ζητας απο το vector πχ την τιμή 10 ενώ εχει απο 0 μεχρι 9, ή κατι αντίστοιχο.
virxen75 Δημοσ. 19 Ιουλίου 2010 Δημοσ. 19 Ιουλίου 2010 > public Object getValueAt(int rowIndex, int columnIndex) { Vector v = (Vector)data.get(rowIndex); System.out.println("data size="+data.size()+"vector size="+v.size()+",row index="+rowIndex+",column index="+columnIndex); return v.elementAt(columnIndex); //return null; } άλλαξε τον κώδικα σου με το παραπάνω και δες που είναι το λάθος.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.