SQLite jTable binding mit Netbeans

AndreasW

Mitglied
Liebe Forengemeinde,
ich verzweifle an der Bindung der jtable mit der SQLite Datenbank.
Die Datenbank enthält eine Tabelle Kunden. Inhalt: id als Primary Key und autoincrement.
Name und Vornamen Spalten.
Die Verbindung wird erfolgreich hergestellt. Treiber jdbc
Jtable übernimmt die Spalten und wenn ich den Code ausführe ergibt sich folgende Exception
Code:
run:
Exception in thread "AWT-EventQueue-0" Local Exception Stack:
Exception [EclipseLink-30005] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: sun.misc.Launcher$AppClassLoader@647e05
Internal Exception: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [Kunden.sqlitePU] failed.
Internal Exception: Exception [EclipseLink-7249] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Entity [class jtablesqlite.Kunden] uses [class jtablesqlite.KundenPK] as embedded ID class whose access-type has been determined as [FIELD]. But [class jtablesqlite.KundenPK] does not define any [FIELD]. It is likely that you have not provided sufficient metadata in your ID class [class jtablesqlite.KundenPK].
    at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:127)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:107)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:177)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:79)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
    at jtablesqlite.Mainframe.initComponents(Mainframe.java:31)
    at jtablesqlite.Mainframe.<init>(Mainframe.java:18)
    at jtablesqlite.Mainframe$1.run(Mainframe.java:105)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [Kunden.sqlitePU] failed.
Internal Exception: Exception [EclipseLink-7249] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Entity [class jtablesqlite.Kunden] uses [class jtablesqlite.KundenPK] as embedded ID class whose access-type has been determined as [FIELD]. But [class jtablesqlite.KundenPK] does not define any [FIELD]. It is likely that you have not provided sufficient metadata in your ID class [class jtablesqlite.KundenPK].
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.createPredeployFailedPersistenceException(EntityManagerSetupImpl.java:1954)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1945)
    at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.callPredeploy(JPAInitializer.java:98)
    at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:96)
    ... 20 more
Caused by: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [Kunden.sqlitePU] failed.
Internal Exception: Exception [EclipseLink-7249] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Entity [class jtablesqlite.Kunden] uses [class jtablesqlite.KundenPK] as embedded ID class whose access-type has been determined as [FIELD]. But [class jtablesqlite.KundenPK] does not define any [FIELD]. It is likely that you have not provided sufficient metadata in your ID class [class jtablesqlite.KundenPK].
    at org.eclipse.persistence.exceptions.EntityManagerSetupException.predeployFailed(EntityManagerSetupException.java:230)
    ... 24 more
Caused by: Exception [EclipseLink-7249] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse.persistence.exceptions.ValidationException
Exception Description: Entity [class jtablesqlite.Kunden] uses [class jtablesqlite.KundenPK] as embedded ID class whose access-type has been determined as [FIELD]. But [class jtablesqlite.KundenPK] does not define any [FIELD]. It is likely that you have not provided sufficient metadata in your ID class [class jtablesqlite.KundenPK].
    at org.eclipse.persistence.exceptions.ValidationException.embeddedIdHasNoAttributes(ValidationException.java:2533)
    at org.eclipse.persistence.internal.jpa.metadata.accessors.mappings.EmbeddedIdAccessor.process(EmbeddedIdAccessor.java:182)
    at org.eclipse.persistence.internal.jpa.metadata.MetadataDescriptor.processMappingAccessors(MetadataDescriptor.java:1518)
    at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.ClassAccessor.processMappingAccessors(ClassAccessor.java:1648)
    at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.processMappingAccessors(EntityAccessor.java:1234)
    at org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor.process(EntityAccessor.java:697)
    at org.eclipse.persistence.internal.jpa.metadata.MetadataProject.processStage2(MetadataProject.java:1793)
    at org.eclipse.persistence.internal.jpa.metadata.MetadataProcessor.processORMMetadata(MetadataProcessor.java:576)
    at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProcessor.processORMetadata(PersistenceUnitProcessor.java:585)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1869)
    ... 22 more
BUILD SUCCESSFUL (total time: 10 seconds)
Bei Verbindung über eine Datenbank via NetbeansDB "localhost" gibt es keine Probleme.
kann mir bitte jemand eine Hilfestellung geben?
Netbeans generiert automatisch eine Kunden.java und eine KundenPK.java.
in der KundenPK.java wird der Fehler angezeigt.
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package jtablesqlite;

import java.io.Serializable;
import javax.persistence.Embeddable;

/**
*
* @author pi
*/
@Embeddable
public class KundenPK implements Serializable {

    public KundenPK() {
    }

    public KundenPK() {
    }

    @Override
    public int hashCode() {
        int hash = 0;
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof KundenPK)) {
            return false;
        }
        KundenPK other = (KundenPK) object;
        return true;
    }

    @Override
    public String toString() {
        return (ERROR); //Hier ist der Fehler!!! ERROR ist rot unterstrichen
    }
 
}
 

Joose

Top Contributor
Woher kommt denn die Variable ERROR welche du in der toString methode zurückliefern willst? Oder willst du den den String "ERROR" zurückliefern?
 

AndreasW

Mitglied
Das habe ich auch gesehen und das bemängelt er auch. Fakt ist dass die beiden classen selbst automatisch angelegt werden, sobald ich jtable mit der Sqlite binde.
 

AndreasW

Mitglied
Ich habe die Klasse Mainframe erzeugt in welcher die jtable integriert wurde. danach habe ich den sqlite jdbc treiber mit der Datenbank Kunden verbunden. Danach wird automatisch eine Klasse Kunden.java und KundenPK.java erstellt und es kommt zum Error beim ausführen. Exception siehe oben. Ich verstehe nicht warum die beiden Klassen erzeugt werden. Und wieso es zum Fehler kommt.
 

AndreasW

Mitglied
So hab es von Hand versucht
Bekomme leider immernoch eine Exception ("NullPointerException")
Verbindung wird hergestellt aber Table wird nicht angezeigt.
Anbei der Code: ##Hilfe###
Java:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javanetbeans;

import javax.swing.JOptionPane;
import net.proteanit.sql.DbUtils;
import java.sql.*;






/**
*
* @author tamino
*/
public class AfterLogin extends javax.swing.JFrame {
    PreparedStatement pst;
    ResultSet rs;
    Connection conn=null;
 

    /**
     * Creates new form AfterLogin
     */
    public AfterLogin() {
        initComponents();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
  @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                      
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel1.setFont(new java.awt.Font("DejaVu Serif", 1, 36)); // NOI18N
        jLabel1.setText("Willkommen!");

        jTable1.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 [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jScrollPane1.setViewportView(jTable1);

        jButton1.setText("load");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(55, 55, 55)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jScrollPane1)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(jButton1)))
                .addContainerGap(48, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 63, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                        .addComponent(jButton1)
                        .addGap(27, 27, 27)))
                .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 207, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                    

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                     
       ConnecrDb();
    
        Update_table();
    }                                    

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(AfterLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(AfterLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(AfterLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(AfterLogin.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new AfterLogin().setVisible(true);
            }
        });
    
    
    
    
    
    
    }
 
 
    public static Connection ConnecrDb(){
    try{
    Class.forName("org.sqlite.JDBC");
     Connection conn =DriverManager.getConnection("jdbc:sqlite:/home/tamino/Schreibtisch/Schiessliste.db");
    JOptionPane.showMessageDialog(null, "Connection Established");
    return conn;
       }catch (Exception e){
           JOptionPane.showMessageDialog(null, e);
       return null;
 
       }
    }
 
 
 
 
 
 
    private void Update_table(){
    try{
    String sql ="select * from Test";
   pst=conn.prepareStatement(sql);
   rs=pst.executeQuery();
   jTable1.setModel(DbUtils.resultSetToTableModel(rs));
    }
    catch(Exception e){
    JOptionPane.showMessageDialog(null, e);
     }

}
 

    // Variables declaration - do not modify                 
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    // End of variables declaration               
}
 

Harry Kane

Top Contributor
Bekomme leider immernoch eine Exception ("NullPointerException")
Bei Exceptions IMMER, IMMER, IMMER den stack trace mit posten und im Code die betroffenen Zeilen kennzeichnen.
"conn" ist null. In jButton1ActionPerformed wird zwar ConnecrDb aufgerufen, der Rückgabewert wird aber nicht verwendet.
Ich würde dir dringend empfehlen, vor dem Hantieren mit Guis und Datenbanken ein paar Grundlagen zu lernen.
 

AndreasW

Mitglied
In der Console hat es funktioniert. Jetzt habe ich eine Methode updateTable welche in der GUI Jtable1 updaten soll(Refresh). Wenn ich die folgende Methode ausführe wird der gelieferte Datensatz der SQlite Datenbank hinten drangehängt. Ich muss das Model irgendwie auf null setzen und dann neuladen kann mir wer helfen?

Code:
private void updateTable(){
     
    try{
        Statement stmt = c.createStatement();
        String query = "Select * from Kunden Order By Name";
        ResultSet rs = stmt.executeQuery(query);
        DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
        while(rs.next()) {
            model.addRow(new String[]{
                rs.getString("Name"),
                rs.getString("Vorname")
            });  
        }
        jTable1.sizeColumnsToFit(0);
        rs.close();
        stmt.close();
        }catch ( SQLException e){
            System.out.println("Datenvorschau nicht möglich"+e.getMessage());
    }
    }
 

AndreasW

Mitglied
Habs geschafft. Ich musste die model.setRowCount auf 0 setzen, Damit die Ergebnisse in Zeile 1 wieder anfangen.
Java:
private void updateTable(){
    
    try{
        Statement stmt = c.createStatement();
        String query = "Select * from Kunden Order By Name";
        ResultSet rs = stmt.executeQuery(query);
        DefaultTableModel model = (DefaultTableModel)jTable1.getModel();
        model.setRowCount(0);//Das hier hat gefehlt!
        while(rs.next()) {
            model.addRow(new String[]{
                rs.getString("Name"),
                rs.getString("Vorname")
            }); 
        }
        jTable1.sizeColumnsToFit(0);
        rs.close();
        stmt.close();
        }catch ( SQLException e){
            System.out.println("Datenvorschau nicht möglich"+e.getMessage());
    }
    }
 
Zuletzt bearbeitet von einem Moderator:
Ähnliche Java Themen
  Titel Forum Antworten Datum
B Wie kann ich eine Jtable mit Inhalt einer SQL Abfrage füllen Datenbankprogrammierung 14
H Tabellenspalte in JTable in der falschen Reihenfolge Datenbankprogrammierung 10
M Datenbank editierbach machen in JTable Datenbankprogrammierung 13
L jTable mit Datenbankwerten befüllen Datenbankprogrammierung 7
S MySQL JTable zeigt nach Datenbankabfrage eine Spalte zu viel an Datenbankprogrammierung 0
C MySQL JTable in JScrollPane nach insert aktualisieren Datenbankprogrammierung 3
M MySQL SQL Abfrage in JTable mit Berechnung Datenbankprogrammierung 3
L JTable-DB: Letzter wert wird nicht angezeigt. Datenbankprogrammierung 0
S MySQL jPMdbc&MySQL = Fehlerhafte Umlaute in JTable Datenbankprogrammierung 0
R HSQLDB Tabelle in JTable übertragen Datenbankprogrammierung 3
P MySql daten in leeren jtable übertragen Datenbankprogrammierung 5
D von Datenbank in JTable füllen Datenbankprogrammierung 16
D JTable stellt DB da Datenbankprogrammierung 24
A Ausgewählten Jtable Eintrag aus Db löschen Datenbankprogrammierung 9
D DB Tabelle in JTable anzeigen - Probleme Datenbankprogrammierung 8
Rudolf MySQL MySQL Tabelle mit Fremdschlüsseln in JTable darstellen Datenbankprogrammierung 5
E csv datei in JTable einlesen Datenbankprogrammierung 3
D ArrayIndexOutOfBoundsException bei Update von JTable und Model Datenbankprogrammierung 13
E JTable mit Datenbankinhalt befüllen Datenbankprogrammierung 4
N MySQL MYSQL Inhalt an JTable übergeben. Datenbankprogrammierung 11
0 ResultSet in JTable Datenbankprogrammierung 14
M MySQL Table in Jtable integrieren Datenbankprogrammierung 26
B MySQL Row und ColumnIndex aus einer JTable (mysqlDb) selectieren Datenbankprogrammierung 18
M JTable änderung sofort auch in MySQL ändern. Datenbankprogrammierung 7
X Daten einer DatenbankTabelle in JTable darstellen Datenbankprogrammierung 13
M SQL Abfrage in jTable einfügen Datenbankprogrammierung 8
oliver1974 JPA, JTable und 2 DB-Tabellen... Datenbankprogrammierung 2
K JTable mit JDBC verbinden Datenbankprogrammierung 5
D PostgreSQL Von JTable -> Datenbank Datenbankprogrammierung 6
T Recordsets in eine JTable einlesen mit Netbeans 6.0 Datenbankprogrammierung 2
P JTable mit Daten aus MySQL befüllen mit Filterung Datenbankprogrammierung 3
N ID des Datensatzes aus JTable holen (nicht Index!) Datenbankprogrammierung 4
J Von Datenbank --> Vector --> JTable Problem Datenbankprogrammierung 6
J Klasse für Datensatzblättern in Verbindung mit JTable gesuch Datenbankprogrammierung 6
J jTable aktualisieren! Datenbankprogrammierung 2
V DB-Inhalt in JTable Datenbankprogrammierung 5
D Daten von Datenbank in JTable füllen... Datenbankprogrammierung 3
G JTable befüllen Datenbankprogrammierung 5
Juelin MySQL Datenbankmit glassfish und Netbeans Datenbankprogrammierung 18
S Datenbankprogrammierung in Java unter NetBeans 12 funktioniert nicht! Datenbankprogrammierung 1
E netbeans - jsp Daten in Datenbank hinzufügen Datenbankprogrammierung 2
J Netbeans 11 und Eclipse JPA 2.5 Entity wird nicht gefunden Datenbankprogrammierung 4
F MySQL+ Netbeans: Datenbanken mit Automatisch generierten Entity Classes get und set Datenbankprogrammierung 2
S New Connection Wizard / NetBeans Datenbankprogrammierung 0
M Derby/JavaDB Kleine DB mit Tabelle erweitern - Integrität - Alter-Table - Netbeans ... Datenbankprogrammierung 5
S Dringend Netbeans Derby DB random() function Datenbankprogrammierung 6
M Ein mit Netbeans entwickeltes Programm dokumentieren Datenbankprogrammierung 5
P DatenBanken mit Netbeans erstellen Datenbankprogrammierung 17
GianaSisters MS SQL unter Netbeans OK - nach konvertieren Absturz Datenbankprogrammierung 6
K MySQL Verbindung funktioniert in Netbeans aber .jar funktioniert nicht Datenbankprogrammierung 5
E MySQL Treiber aus NetBeans laden Datenbankprogrammierung 13
B MSSQL und NetBeans IDE 6.8 Datenbankprogrammierung 2
E Herangehensweise Neues Projekt mit Netbeans / HSQLDB / JPA Datenbankprogrammierung 3
S Datenbank und Netbeans Datenbankprogrammierung 11
M komplettNoob-Fragen: MySQL mit NetBeans nutzen Datenbankprogrammierung 13
T JDBC mit Netbeans 6.0 Datenbankprogrammierung 2
R NetBeans und com.mysql.jdbc.Driver Datenbankprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben