URL: https://www.overclockers.at/coding-stuff/java-query-aus-java-db-in-tabelle-ausgeben_228846/page_1 - zur Vollversion wechseln!
Hallo,
also nach stundenlanger Suche im Internet frag ich jetzt euch....
Ich bastel grad an einer GUI mit Netbeans/Swing ...
Weiters verwende ich die Java DB (Derby) ... soweit so gut, Datensatz kann ich eintragen, nur über die Hürde mir die Daten ausgeben zu lassen komm ich nicht.
hier mal der Java Code den ich geschrieben habe.
Code: JAVAEntityManagerFactory emf = Persistence.createEntityManagerFactory("schulePU"); EntityManager em = emf.createEntityManager(); Person p = new Person(); p.setName(zuname); p.setVorname(vorname); p.setAdresse(adresse); p.setTelefon(telefon); em.getTransaction().begin(); em.persist(p); em.getTransaction().commit(); em.close(); emf.close();
Code: JAVAQuery query = em.createQuery("select * from TEST.PERSON");
Code: JAVAjTable2 = new javax.swing.JTable(); jTable2.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, {null, null, null, null}, }, new String [] { "Vorname", "Zuname", "Telefon", "Adresse" } )); jScrollPane4.setViewportView(jTable2);
also mit netbeans hat das mal eher am rande zu tun, die frage nach einem netbeans-spezialisten lässt also völlige planlosigkeit erahnen
was du verwendest nennt sich JPA (java persistence api), ich würd also mal nach tutorials zu dem thema googlen...
jedenfalls musst du den query, den du vom entitymanager kriegst, ausführen und dann die ergebnisse in deine tabelle kriegen. im einfachsten mal mit query.getResultList ausführen und dann über die liste, die du zurückkriegst, iterieren und dein tablemodel entsprechend befüllen. scheint bei netbeans sogar über die gui zu gehen (http://rubenlaguna.com/wp/2009/08/1...jpa-pagination/ - halt von 2009, ymmv)
Eine JTable braucht ein TableModel.
Könnte für deinen Fall ca. so aussehen:
Code: JAVApublic MyTableModel extends AbstractTableModel { private List<Person> persons; public MyTableModel(List<Person> persons) { this.persons = persons; } public int getRowCount() { return persons.size(); } public int getColumnCount() { return 4; } public Object getValueAt(int row, int column) { Person person = persons.get(row); switch(column) { case 0: return person.getName(); [etc.] } } }
okay danke mal, ich spiel mich grad damit...
Als ich mal sowas programmiert habe, hatte ich es so gelöst (ist nur copy paste aus dem programm, damit du eine idee bekommst:
Code: JAVAint tablecounter = 0, columncounter = 0, primarykeycounter = 0, foreignkeycounter = 0; System.out.println("Tabellen werden überprüft..."); connect(); Connection con = getConnection(); try { Statement stmt = con.createStatement(); ResultSet rstables = stmt.executeQuery("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'PUBLIC'"); ResultSetMetaData metatables = rstables.getMetaData(); int tableCount = metatables.getColumnCount(); // Checkt Tabellennamen while (rstables.next()) { columncounter = 0; primarykeycounter = 0; foreignkeycounter = 0; tablecounter++; String[] tables = new String[tableCount]; for (int i = 0; i < tableCount; i++) { tables[i] = rstables.getString(i + 1); if (tablenames.contains(tables[i])) { System.out.println("\r\n" + "Tabelle '" + tables[i] + "' gefunden."); ResultSet rscolumns = stmt.executeQuery("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + tables[i] + "'"); ResultSetMetaData metacolumns = rscolumns.getMetaData(); int colCount = metacolumns.getColumnCount(); // Checkt die Spalten der einzelnen Tabellen while (rscolumns.next()) { columncounter++; String[] columns = new String[colCount]; for (int j = 0; j < colCount; j++) { columns[j] = rscolumns.getString(j + 1); } switch (tables[i]) { case "MOVIES": for (int k = 0; k < colCount; k++) { if(moviesstructure.contains(columns[k])) { System.out.println("Spalte '" + columns[k] + "' in Tabelle '" + tables[i] + "' gefunden."); } else { System.out.println("Spalte '" + columns[k] + "' in Tabelle '" + tables[i] + "' nicht gefunden. Tabelle beschädigt."); return false; } } break;
Code: JAVA/** * Gibt die Verbindung mit der Datenbank zurück. * @return Connection zur Datenbank. */ public Connection getConnection() { if (this.con != null) { return this.con; } else { connect(); return this.con; } } /** * Erstellt eine Verbindung mit der Datenbank. */ public void connect() { // Treiberklasse laden try { Class.forName("org.hsqldb.jdbcDriver"); } catch ( ClassNotFoundException e ) { System.err.println( "Treiberklasse nicht gefunden!" ); return; } // Connection aufbauen try { this.con = DriverManager.getConnection(db, username, password); } catch ( SQLException e ) { e.printStackTrace(); } }
also, ganz ehrlich, ich zieh meinen studenten gerne etwas ab, wenn sie zuerst die ganze datenbank laden und dann die liste sortieren
und entweder fehlt da ein signifikanter teil, aber was vom ursprungsproblem (jtable mit daten aus datenbank füllen) du in deinen snippets löst, erschließt sich mir leider nicht...
ja, da fehlt einiges, wäre einfach viel zu viel gewesen (und es hätte kein mehrwert gehabt,da sich alles wiederholt).
wenn die datenbank geladen wird, sollte es stets nach der id sortiert im table erscheinen (wollte ich so). nur während der programmausführung möchte man (in meinem fall) zb die filme oft nach erscheinungsfahr, titel, ratings etc sortieren, was nur im vektor passiert.
was besser ist, kann ich nicht sagen, da mir einfach die erfahrung fehlt. war mein erstes projekt mit datenbanken, um es einfach mal zu lernen (bin selbst noch student).
Ich hatte die Frage so verstanden, dass er zusätzlich nicht wirklich weiß, was er mit dem query anstellen soll.
ich habe mir an dieser stelle das query ganz anders ausgeben lassen, was die weiterverarbeitung vllt einfacher macht (noch nie mit dem entitymanager) gearbeitet, deswegen kann ich es nicht beurteilen.
Wie man es dann in ein Tablemodel bekommt, habe ich ja danach kurz geschrieben, weil ich den code leider nicht parat habe.
Falls er dort Probleme haben sollte, kann er sich ja gerne noch einmal melden
sorry fürs ot
edit: ich habe das beispiel gefunden, nach welchem ich mich damals orientiert hatte, hth
http://www.java2s.com/Code/JavaAPI/...letoaJTable.htm
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025