ResultSet via Vector - Klasse in JTable schreiben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ResultSet via Vector - Klasse in JTable schreiben

    hi!

    ich versuche mittels Vector-Klasse ein Resultset in eine jtable zu schreiben, mit einer LinkedHashMap hat es geklapt, jedoch wirft der Vector mir immer Fehler entgegen :)

    Hier der Code:

    Quellcode

    1. import java.sql.*;
    2. import java.util.Vector;
    3. import java.util.logging.Level;
    4. import java.util.logging.Logger;
    5. import javax.swing.table.DefaultTableModel;
    6. public class TableVector extends DefaultTableModel {
    7. Connection con;
    8. Statement stmt;
    9. ResultSet rs;
    10. ResultSetMetaData rsmd;
    11. Vector tableAll = new Vector();
    12. Vector rowContent = new Vector();
    13. int colCount;
    14. Vector hans = new Vector();
    15. public TableVector(){
    16. try {
    17. Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    18. } catch (ClassNotFoundException e) {
    19. // TODO Automatisch erstellter Catch-Block
    20. e.printStackTrace();
    21. }
    22. try
    23. {
    24. String connectionUrl = "jdbc:sqlserver://dbserver:1433;"+
    25. "databaseName=XXXX;user=XXXX;password=XXX;";
    26. con = DriverManager.getConnection(connectionUrl);
    27. stmt = con.createStatement();
    28. rs = stmt.executeQuery("SELECT * FROM HM");
    29. rsmd = rs.getMetaData();
    30. colCount = rsmd.getColumnCount();
    31. } catch (SQLException e1) {
    32. // TODO Automatisch erstellter Catch-Block
    33. e1.printStackTrace();
    34. }
    35. try {
    36. while(rs.next()){
    37. for(int m = 0; m < colCount; m++){
    38. rowContent.add(rs.getString(m + 1));
    39. System.out.print(rs.getString(m + 1));
    40. }
    41. tableAll.addElement(rowContent);
    42. rowContent.clear();
    43. }
    44. } catch (SQLException e) {
    45. // TODO Automatisch erstellter Catch-Block
    46. e.printStackTrace();
    47. }
    48. }
    49. @Override
    50. public Object getValueAt(int arg0, int arg1)
    51. {
    52. try{
    53. hans = (Vector) tableAll.get(arg1); // Casting
    54. return hans.get(arg0);
    55. }
    56. catch (ArrayIndexOutOfBoundsException ex){
    57. return 0;
    58. }
    59. }
    60. @Override
    61. public int getColumnCount()
    62. {
    63. return colCount;
    64. }
    65. @Override
    66. public int getRowCount()
    67. {
    68. return 10; //testweise
    69. }
    70. }
    Alles anzeigen


    Dieser Teil:
    public Object getValueAt(int arg0, int arg1)

    Quellcode

    1. {
    2. try{
    3. hans = (Vector) tableAll.get(arg1); // Casting
    4. return hans.get(arg0);
    5. }
    6. catch (ArrayIndexOutOfBoundsException ex){
    7. return 0;
    8. }


    scheint nicht richtig zu funktionieren, obwohl der Vector die Daten enthält, wird wohl immer eine ArrayIndexOutofBound - Exception rausgehauen, so dass alle Spalten 0 sind, wegen dem return. Wenn ich kein Try und Catch ein baue kommt die Meldung halt direkt ->
    Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0

    Könnt ihr mir irgendwie helfen?

    Vielen Dank
  • Vielen Dank erstmal, durch Debuggen konnte ich das Problem erstmal eingrenzen, aber es wird verwirrender :)

    Also sobald

    Quellcode

    1. rowContent.clear

    aufgerufen wird, wird tableAll ebenfalls geleert, die size ist noch so hoch wie die hinzugefügte Elemente, jedoch sind die Inhalte weg. Wenn ich RowContent.clear entferne, wird logischerweise immer nur der Index 0 übertragen.
    Ich habe keine Ahnung warum der Aufruf rowContent.clear die Inhalt von tableAll mit verwirft?!?