Access Datenbank

MaxG.

Bekanntes Mitglied
Hi,
ich wollte mal was mit Datenbanken machen und hab ein Java Programm programmiert das Daten in eine Access Datenbank speichert. Das Problem ist, dass es Probleme mit dem Treiber gibt. Es kommt immer eine Exeption. Was hab ich falsch gemacht? Hier noch der Code:
Java:
package Gui;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

import Core.Datenbank;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;;

public class UserInterface extends JFrame{
   
    public JPanel inputContainer;
    public JPanel adresse;
    public JPanel kontakt;
    public JPanel name;
    public JPanel buttonContainer;
   
    public JLabel labelNachname;
    public JLabel labelVorname;
    public JLabel labelAnrede;
    public JLabel labelStraße;
    public JLabel labelHausnummer;
    public JLabel labelOrt;
    public JLabel labelEmail;
    public JLabel labelTelefonnummer;
   
    public JTextField textfieldNachname;
    public JTextField textfieldVorname;
    public JTextField textfieldStraße;
    public JTextField textfieldHausnummer;
    public JTextField textfieldOrt;
    public JTextField textfieldEmail;
    public JTextField textfieldTelefonnummer;
   
    public JComboBox<String> comboboxAnrede;
   
    public JButton save;
    public JButton cancel;
   
    String comboBoxListe[] = {"Auswählen", "Herr", "Frau"};
   
    public UserInterface(){
        this.setTitle("Address-Buch");
        this.setSize(300,270);
        this.setLayout(new BorderLayout());
       
       
       
        inputContainer = new JPanel();
        inputContainer.setLayout(new BorderLayout());
       
        name = new JPanel();
        name.setLayout(new GridLayout(3,2,2,2));
       
        labelAnrede = new JLabel("Anrede");
        labelNachname = new JLabel("Nachname");
        labelVorname = new JLabel("Vorname");
       
        comboboxAnrede = new JComboBox<>(comboBoxListe);
       
        textfieldNachname = new JTextField(10);
        textfieldVorname = new JTextField(10);
       
        name.add(labelAnrede);
        name.add(comboboxAnrede);
        name.add(labelNachname);
        name.add(textfieldNachname);
        name.add(labelVorname);
        name.add(textfieldVorname);
       
       
        adresse = new JPanel();
        adresse.setLayout(new GridLayout(3,2,2,2));
       
        labelOrt = new JLabel("Ort");
        labelStraße = new JLabel("Straße");
        labelHausnummer = new JLabel("Hausnummer");
       
        textfieldOrt = new JTextField(10);
        textfieldStraße = new JTextField(10);
        textfieldHausnummer = new JTextField(10);
       
        adresse.add(labelOrt);
        adresse.add(textfieldOrt);
        adresse.add(labelStraße);
        adresse.add(textfieldStraße);
        adresse.add(labelHausnummer);
        adresse.add(textfieldHausnummer);
       
       
        kontakt = new JPanel();
        kontakt.setLayout(new GridLayout(2,2,2,2));
       
        labelEmail = new JLabel("E-Mail");
        labelTelefonnummer = new JLabel("Telefonnummer");
       
        textfieldEmail = new JTextField(10);
        textfieldTelefonnummer = new JTextField(10);
       
        kontakt.add(labelEmail);
        kontakt.add(textfieldEmail);
        kontakt.add(labelTelefonnummer);
        kontakt.add(textfieldTelefonnummer);
       
       
        buttonContainer = new JPanel();
        buttonContainer.setLayout(new FlowLayout());
       
        save = new JButton("Speichern");
        cancel = new JButton("Abbrechen");
       
        buttonContainer.add(save);
        buttonContainer.add(cancel);
       
       
        inputContainer.add(name, BorderLayout.NORTH);
        inputContainer.add(adresse, BorderLayout.CENTER);
        inputContainer.add(kontakt, BorderLayout.SOUTH);
       
        this.add(inputContainer, BorderLayout.CENTER);
        this.add(buttonContainer,BorderLayout.SOUTH);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
   
    public void showWindow(){
        this.setVisible(true);
    }
   
    public void listener(){
        save.addActionListener(new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent a) {
                // TODO Auto-generated method stub
                String nachname, vorname, straße, ort, eMail, anrede;
                int hausnummer = 0;
                long telefonnummer = 0;
                boolean statusHausnummer = true, statusTelefonnummer = true, statusAnrede = true;
               
                nachname = textfieldNachname.getText();
                vorname = textfieldVorname.getText();
                straße = textfieldStraße.getText();
                ort = textfieldOrt.getText();
                eMail = textfieldEmail.getText();
                anrede = (String) comboboxAnrede.getSelectedItem();
               
                try{
                    telefonnummer = Long.parseLong(textfieldTelefonnummer.getText());
                    statusTelefonnummer = true;
                }catch(NumberFormatException e){
                    JOptionPane.showMessageDialog(null, "Bitte gülitige Telefonnummer eingeben!");
                    statusTelefonnummer = false;
                }
               
               
                try{
                    hausnummer = Integer.parseInt(textfieldHausnummer.getText());
                    statusHausnummer = true;
                    if(hausnummer > 10000){
                        JOptionPane.showMessageDialog(null, "Bitte gülitige Hausnummer eingeben!");
                        statusHausnummer = false;
                        textfieldHausnummer.setText(null);
                    }
                }catch(NumberFormatException e){
                    JOptionPane.showMessageDialog(null, "Bitte gülitige Hausnummer eingeben!");
                    statusHausnummer = false;
                }
               
                if(anrede.equals("Auswählen")){
                    JOptionPane.showMessageDialog(null, "Bitte Anrede wählen");
                    statusAnrede = false;
                }else{
                    statusAnrede = true;
                }
               
                if(statusAnrede == true && statusTelefonnummer == true && statusHausnummer == true){
                    System.out.println("Saved");
                   
                    Datenbank db = new Datenbank(anrede,nachname,vorname,ort,straße,hausnummer,eMail,telefonnummer);
                   
                }
               
            }
        });
       
       
        cancel.addActionListener(new ActionListener() {
           
            @Override
            public void actionPerformed(ActionEvent a) {
                // TODO Auto-generated method stub
                textfieldNachname.setText(null);
                textfieldVorname.setText(null);
                textfieldStraße.setText(null);
                textfieldHausnummer.setText(null);
                textfieldOrt.setText(null);
                textfieldEmail.setText(null);
                textfieldTelefonnummer.setText(null);
                comboboxAnrede.setSelectedItem("Auswählen");
            }
        });
    }

}

Java:
package Run;

import Gui.UserInterface;

public class RunProgramm {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        UserInterface gui = new UserInterface();
        gui.showWindow();
        gui.listener();
    }

}

Java:
package Core;

import java.sql.*;

public class Datenbank {

    private String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
    private String url = " jdbc:odbc:Driver={Microsoft Access Driver (*.accdb)};DBQ=C:/Users/grohmann/Documents/Kontaktverwaltung.accdb";
    private Connection con;
    private Statement stmt;
    private ResultSet rs;

   
    public Datenbank(String anrede, String nachname, String vorname, String ort, String straße, int hausnummer, String eMail, long telefonnummer){
       
        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        }catch(ClassNotFoundException e){
            System.out.println("Datenbanktreiber nicht gefunden");
        }
       
        try {
            con = DriverManager.getConnection(url,"","");
        } catch (SQLException e) {
            System.out.println("Connection fehlgeschlagen");
        }
       
        try {
            stmt = con.createStatement();
        } catch (SQLException e) {
            System.out.println("Statement fehlgeschlagen");
        }
       
        try {
            rs = stmt.executeQuery("INSERT INTO Tabelle1 (Anrede, Nachname, Vorname, Ort, Straße, Hausnummer, E-Mail, Telefonnummer, VALUES ("+ anrede + ", " + nachname + ", " + vorname + ", " + ort + ", " + straße + ", " + hausnummer + ", " + eMail + ", " + telefonnummer + ")");           
        } catch (SQLException e) {
            System.out.println("Query Fehlgeschlagen");
        }
       
    }
   
}

Die Datenbank heißt Kontaktverwaltung und liegt unter folgendem pfad:
C:\Users\grohmann\Documents\Kontaktverwaltung.accdb
 

MaxG.

Bekanntes Mitglied
Console:
Saved
Datenbanktreiber nicht gefunden
Connection fehlgeschlagen
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Core.Datenbank.<init>(Datenbank.java:29)
at Gui.UserInterface$1.actionPerformed(UserInterface.java:188)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 

MaxG.

Bekanntes Mitglied
bzw. was muss ich anderst machen das die Exeptions nicht mehr ausgelöst werden und das Programm auch das macht was es soll?
 

Thallius

Top Contributor
Ganz ehrlich? Der Fehler liegt schon im Konzept. Access ist seit 20 Jahren tot. Nimm irgendeine aktuelle Datenbank

Gruß

Claus
 

mrBrown

Super-Moderator
Mitarbeiter

MaxG.

Bekanntes Mitglied
Ich Arbeite mit Eclipse und Habe über Project-> Properties-> Java Build Path-> Libaries-> Add Libary...-> Marven Managed Dependencies eingebunden

Ich habe noch ein Video gefunden allerdings für MySQL. Dort musste man einen Connector herunterladen. Benötigt man den unter Access auch und wenn ja, wo bekommt man den her?

Hab diesen link noch dafür gefunden: http://www.easysoft.com/applications/microsoft-access/jdbc-odbc.html
 
Zuletzt bearbeitet von einem Moderator:

HarleyDavidson

Bekanntes Mitglied
Wenn du wirklich was mit Datenbanken machen willst, empfehle ich dir diese hier:
http://www.h2database.com
Klein, unkompliziert, verfügt aber über die volle Funktionalität. Und gute Tutorials gibt es auch dazu.
Access in einem Satz mit dem Wort Datenbank zu verwenden ist schon grenzwertig ;) (Sorry, musste sein) :D
 

Thallius

Top Contributor
Ich würde zum Anfang immer empfehlen SQLite zu nehmen. Das läuft ohne Server und ist eigentlich zu 99% kompatibel zu SQL. Man lernt also gleich etwas das man später auch bei "richtigen " Datenbanken verwenden kann.

Gruß

Claus
 

JarJarBinks

Mitglied
Mahlzeit,

Also falls du Java 8 verwendest ist diese JDBC-ODBC-Bridge nicht mehr verfügbar.
Zumindest auf den ersten Blick.
Du kannst die JdbcOdbc.dll und jdbcodbc.jar aus Java 7 in dein Java 8 einbinden.

Die JdbcOdbc.dll muss in den bin-Ordner von der Java 8 JRE, der normalerweise unter C:\ Program Files \ Java \ jdk1.8.x \ jre \ bin zu finden ist.

Die jdbcodbc.jar muss in den ext-Ordner der Java 8 JRE Library, der normalerweise unter C:\ Program Files \ Java \ jdk1.8.x \ jre \ lib \ ext zu finden ist.

Gruß,
JarJar
 

JStein52

Top Contributor
@MaxG. bist du denn durch irgendwas auf Access festgelegt ? Falls nein ist dies wirklich die schlechteste aller Alternativen. SQLLite oder H2DB wären für den Einstieg die besten Alternativen. (Beide oben schon erwähnt)
 

MaxG.

Bekanntes Mitglied
Hab jetzt den ersten Fehler gefunden, musste noch als JRE Java 7 angeben. Jetzt kennt er wenigstens den Treiber. Habe jetzt aber noch das Problem mit der Connection, wie setzt die sich zusammen??
 

MaxG.

Bekanntes Mitglied
Das ist die Aktuelle Consolen-Fehlermeldung:

Code:
java.sql.SQLException: No suitable driver found for  jdbc:odbc:Kontaktverwaltung
Connection fehlgeschlagen
    at java.sql.DriverManager.getConnection(DriverManager.java:596)
    at java.sql.DriverManager.getConnection(DriverManager.java:233)
    at Core.Datenbank.<init>(Datenbank.java:23)
    at Gui.UserInterface$1.actionPerformed(UserInterface.java:188)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6516)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6281)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4872)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at Core.Datenbank.<init>(Datenbank.java:30)
    at Gui.UserInterface$1.actionPerformed(UserInterface.java:188)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6516)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3320)
    at java.awt.Component.processEvent(Component.java:6281)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4872)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Window.dispatchEventImpl(Window.java:2719)
    at java.awt.Component.dispatchEvent(Component.java:4698)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
    at java.awt.EventQueue.access$200(EventQueue.java:103)
    at java.awt.EventQueue$3.run(EventQueue.java:694)
    at java.awt.EventQueue$3.run(EventQueue.java:692)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:708)
    at java.awt.EventQueue$4.run(EventQueue.java:706)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
 
Zuletzt bearbeitet von einem Moderator:

MaxG.

Bekanntes Mitglied
Jap wird gemacht.

Hab jetzt ne Lösung für mein Programm. Mit dieser URL gehts :
Code:
"jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}; DBQ=" + "C:/Users/grohmann/workspaceTMS/Kontaktdatenbank/src/Kontaktverwaltung.accdb"
 

MaxG.

Bekanntes Mitglied
Mein neues Problem ist das kein ResultSet produziert wird.
Fehlermeldung:
Code:
java.sql.SQLException: No ResultSet was produced

Code:
Code:
try {
            rs = stmt.executeQuery(myQuery);            
        } catch (SQLException e) {
            System.out.println("Query Fehlgeschlagen");
            e.printStackTrace();
        }

Woran liegt das?
 

MaxG.

Bekanntes Mitglied
Java:
private String myQuery = "INSERT INTO Tabelle1 VALUES('1' , 'Herr' , 'Nachname' , 'Vorname' , 'Ort' , 'Straße' , '3' , 'email' , '08374')";
 

Joose

Top Contributor
Ein INSERT kann dir kein ResultSet liefern.
Wenn es dir was zurückliefert dann nur ein "int" welches dir angibt wieviele Rows in die Tabelle eingetragen wurden. Bzw -1 wenn nichts eingetragen wurde.
 

MaxG.

Bekanntes Mitglied
Allerdings hab ich schon wieder das nächste Problem. Kann man bei einem Insert auch Variablen als werte nehmen ??
Etwa so:
Java:
String myQuery = "INSERT INTO Tabelle1(Anrede, Nachname, Vorname, Ort, Straße, Hausnummer, E-Mail, Telefonnummer, VALUES ('"+ anrede + "', '" + nachname + "' , '" + vorname + "' , '" + ort + "' , '" + straße + "' , '" + hausnummer + "' , '" + eMail + "' , '" + telefonnummer + "')";
 

Joose

Top Contributor
Ja das geht. Wo genau liegt denn das Problem?
Aber du solltest dir das Statement nicht so zusammenbauen (per String concat) sondern stattdessen PreparedStatements verwenden.

Dadurch kannst du SQLInjections verhindern, das Statement wird lesbarer und du musst nicht an die Anführungszeichen bei Strings denken (durch die entsprechenden Methoden wird das automatisch geregelt)
 

MaxG.

Bekanntes Mitglied
Der zeigt mir aber immer einen Syntaxfehler an:
Code:
 java.sql.SQLException: [Microsoft][ODBC-Treiber für Microsoft Access] Syntaxfehler in der INSERT INTO-Anweisung.
 

MaxG.

Bekanntes Mitglied
Java:
 String myQuery = "INSERT INTO Tabelle1(Anrede, Nachname, Vorname, Ort, Straße, Hausnummer, E-Mail, Telefonnummer) VALUES('"+ anrede + "', '" + nachname + "' , '" + vorname + "' , '" + ort + "' , '" + straße + "' , '" + hausnummer + "' , '" + eMail + "' , '" + telefonnummer + "')";
 

Flown

Administrator
Mitarbeiter
Alles ist ist in deiner DB als String gespeichert, auch Zahlen? Was sagt denn die Exception? Möglich, dass du den ';' zum Schluss vergessen hast?
 

MaxG.

Bekanntes Mitglied
Habs jetzt herausgefunden, es war der Bindestrich bei E-Mail
Verbesserte Funktion:
Java:
String myQuery = "INSERT INTO Tabelle1(Anrede, Nachname, Vorname, Ort, Straße, Hausnummer, Email, Telefonnummer) VALUES('"+ anrede + "', '" + nachname + "' , '" + vorname + "' , '" + ort + "' , '" + straße + "' , '" + hausnummer + "' , '" + eMail + "' , '" + telefonnummer + "')";
 

Neumi5694

Top Contributor
Mit der von dir verwendeten Methode kriegst du ein Problem, wenn eine der Variablen ein einfaches Hochkomma enthält. Gerade bei Texten solltest du - anstatt den String zusammenzubauen - ein PreparedStatement verwenden (das verhindert auch, dass jemand SQL Code in eine Variable schmuggelt).
Ich hab in diesem Code auch noch die Namen der Spalten in Access markiert (diese Formatierung funktioniert NUR in Access, andere DBs haben eigene Formate)
Damit kannst du - sofern du das vorhast - auch reservierte Worte als Spalten- und Tabellennamen verwenden.

Java:
try (PreparedStatement instertStatement = con.prepareStatement("INSERT INTO [Tabelle1]([Anrede], [Nachname], [Vorname], [Ort], [Straße], [Hausnummer], [Email], [Telefonnummer]) VALUES(?,?,?,?,?,?,?,?)")) {
    inserStatement.setString(1, anrede);
    inserStatement.setString(2, nachname);
    inserStatement.setString(3, vorname);
    inserStatement.setString(4, ort);
    inserStatement.setString(5, straße);
    inserStatement.setString(6, hausnummer);
    inserStatement.setString(7, eMail);
    inserStatement.setString(8, telefonnummer);
    insertSatement.executeUpdate();
}

ps: ExecuteUpdate liefert bei "insert" keinen brauchbaren Wert (zumindest mit MS Access), bei "update" hingegen kannst du hier prüfen, wie viele Zeilen verändert wurden.
 

Neumi5694

Top Contributor
Noch eines: Im Beispiel hab ich eine sogenannte try-with-resource verwendet.
https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

Du hast in deinem Code nämlich überall vergessen, nach der Verwendung Resultsets und Statements zu schließen.
Java:
try (java.io.Closeable variable = initializeMe()) {
    variable.doSomething();
}
entspricht
Java:
{
    java.io.Closeable variable = initializeMe();
    variable.doSomething();
    variable.close();
}
=> Variable nur innerhalb der Klammern sichtbar.
=> Am Ende des Blocks wird .close() ausgeführt, die Resource freigegeben.

Exceptions werden so NICHT behandelt, die müssen nach wie vor entweder direkt danach oder in der aufrufenden Methode behandelt werden.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Verbindung zu einer Access Datenbank per Eclipse oder Intellij Datenbankprogrammierung 0
I Access Datenbank in Table einlesen lassen Datenbankprogrammierung 2
Z Finde den Fehler: Daten aus einer Access-Datenbank lesen Datenbankprogrammierung 12
S HSQLDB Zugriff auf Access Datenbank Datenbankprogrammierung 0
V Datenbank Access einbinden Datenbankprogrammierung 11
A Verbindung mit Access 2007 Datenbank herstellen Datenbankprogrammierung 1
J Verbindung zu Access Datenbank Datenbankprogrammierung 15
J Access Datenbank mit JAVA erstellen - boolean Werte Datenbankprogrammierung 4
E Access Datenbank, Linux Umgebung Datenbankprogrammierung 4
E Access Datenbank mit Insert befüllen Datenbankprogrammierung 5
K MySQL JDBC - Access Datenbank - unbekannter TabellenName Datenbankprogrammierung 4
K Access Datenbank mit Java auf win7 64bit Datenbankprogrammierung 14
F Zugriff auf MS Access-Datenbank mit jackcess Datenbankprogrammierung 10
P Access Datenbank durchsuchen Datenbankprogrammierung 8
B MAC Access Datenbank in Java verwenden - Treiberproblem Datenbankprogrammierung 2
NoXiD Access Datenbank in java einbinden ohne ODBC treiber zu erstellen Datenbankprogrammierung 5
T Problem bei Zugriff auf Access Datenbank Datenbankprogrammierung 7
Q Access Datenbank in eine Internetseite einbinden Datenbankprogrammierung 2
M Zugriff auf eine Access-Datenbank innerhalb eines jar-Files Datenbankprogrammierung 7
J Zugriff auf Access-Datenbank Datenbankprogrammierung 3
D Access Datenbank in .jar-Datei Datenbankprogrammierung 51
M Access Datenbank ! Datenbankprogrammierung 5
B Platzierung einer Access Datenbank Datenbankprogrammierung 4
D An Access Datenbank andocken ohne sie beim System anzumelden Datenbankprogrammierung 3
D String[][] Array in Access Datenbank speichern Datenbankprogrammierung 5
B JDBC Verbindung zu Access Datenbank Datenbankprogrammierung 6
T Access-Datenbank unter Mac OS X Datenbankprogrammierung 14
J Verbindung zur Datenbank MS Access Datenbankprogrammierung 4
O Access Datenbank mit Java bedienen Datenbankprogrammierung 2
A Problme mit Access als Datenbank Datenbankprogrammierung 3
D Access-Datenbank unter Java verwenden Datenbankprogrammierung 7
K Zugriff auf Access-Datenbank Datenbankprogrammierung 4
G In Access-Datenbank schreiben Datenbankprogrammierung 10
Tom#234 Jakarta Web Service SQL Access Error Datenbankprogrammierung 7
H Datenbankverbindung zu MS Access Datenbankprogrammierung 4
G Connect zu ACCESS-DB mit Ucanaccess Datenbankprogrammierung 11
V keine Verbindung möglich (Access-DB) Datenbankprogrammierung 3
Thallius MySQL JDBC auf Linux Server zu mySQL DB auf anderem Linux Server wirft Access denied Datenbankprogrammierung 5
Z [JDBC][MYSQL] Access denied Datenbankprogrammierung 7
J Unterschied @Id und @Access? Datenbankprogrammierung 5
D UCanAccess / MS Access - Tabelle / Spalte vorhanden Datenbankprogrammierung 3
J Java 8 und Microsoft Access Database-Dateien(mdb) Datenbankprogrammierung 1
W Access DB Metainfo hinzufügen Datenbankprogrammierung 8
Neumi5694 MS Access Sicherheit entfernen Datenbankprogrammierung 0
F Brauche dringend Hilfe Java-Access Connection Datenbankprogrammierung 3
L mdb (access) ansteuern: Welcher weg ist der Beste Datenbankprogrammierung 3
D Java MS Access Verbindung Datenbankprogrammierung 10
Neumi5694 MS Access Tabellenbesitzer ändern Datenbankprogrammierung 0
Neumi5694 Java + MS Access + 64 Bit = Fehler -1073740777 Datenbankprogrammierung 2
R MS-Access mit JAva auslesen Datenbankprogrammierung 7
Gossi MySQL Access denied Datenbankprogrammierung 11
M Datenbankverbindung Access Datenbankprogrammierung 3
F Insert into Access Datenbankprogrammierung 3
C Access Datenbankprogrammierung 2
T Access 32bit on Win7 64Bit ODBC Problem Datenbankprogrammierung 1
H Microsoft Access Treiber wird nicht gefunden Datenbankprogrammierung 9
T Datenbankverbindung access funtioniert nicht Datenbankprogrammierung 21
M Access Update Statement Fehler update -> unmöglich? Datenbankprogrammierung 3
M Access Abfrage mit Parameter & Access/Java liefern unterschiedliche Ergebnisse Datenbankprogrammierung 2
M Access Datensatz beinhaltet ESC-Zeichen Datenbankprogrammierung 3
S Access 2007 zugreifen- ODBC Driver Manger Datenbankprogrammierung 3
R MS Access mit Java Problem mit Update Statment Datenbankprogrammierung 13
M Problem mit Hibernate und Access Datenbankprogrammierung 9
S Datenbankapplikation von Access -> Java Datenbankprogrammierung 18
J mit java in access DB über odbc/jdbc Datenbankprogrammierung 2
C MS Access und Jarkarta POI Datenbankprogrammierung 4
E [ACCESS ODBC] INSERT INTO Fehler Datenbankprogrammierung 4
H java.sql.SQLException: Access denied for user 'root'@'localhost' (using password : YES) Datenbankprogrammierung 1
N Wie kann ich Zugriff auf eine MS Access DB (mit JDBC) über Netzwerk erreichen? Datenbankprogrammierung 7
M Spaltennamen einer MS Access Tabelle ermitteln Datenbankprogrammierung 3
F Zugriff auf MS Access DB Datenbankprogrammierung 3
T Problem beim Update in die Access DB Datenbankprogrammierung 9
M Tabelle in Access Datei mit JDBC generieren Datenbankprogrammierung 3
C MySQL langsamer als MS ACCESS Datenbankprogrammierung 5
S Connection String MS Access mit Systemdatenbank / Arbeitsgruppeninformationsdatei Datenbankprogrammierung 4
X JDBC und MS-Access Sicherheitslücken? Datenbankprogrammierung 4
N mehrere Abfragen nacheinander wie mit MS Access mit JAVA Datenbankprogrammierung 3
G "Adapter" Access -> MySQL? Datenbankprogrammierung 6
J Java DB Zugriff auf Access (Migration auf andere DB) Datenbankprogrammierung 8
H Fehler mit ". Microsoft Access Driver" Datenbankprogrammierung 12
K Java JDBC Access Datenstruktur Datenbankprogrammierung 2
V Überprüfen ob Tabelle existiert in Access per ODBC Datenbankprogrammierung 2
S Access vom Programm aus starten Datenbankprogrammierung 8
V Tabelle kopieren (Superbase -> Access) Datenbankprogrammierung 1
G Java und Access? Datenbankprogrammierung 3
D Problem mit Access abfrage Datenbankprogrammierung 10
J Insert auf Access DB funktioniert nicht Datenbankprogrammierung 5
E Wie auf MS-Access DB zugreifen? Datenbankprogrammierung 8
M Hilfe -Access mag sein Replace nciht merh Datenbankprogrammierung 2
alexpetri Problem mit jdbc MS Access / nach 670 inserts ist schluss. Datenbankprogrammierung 4
U MS Access reservierte Wörter Datenbankprogrammierung 2
S Fehler bei DB Verbindung Access Datenbankprogrammierung 6
V MS Access DB - Schreibschutz deaktivieren Datenbankprogrammierung 3
S PreparedStatements, Abfrageoptimierung unter MS Access Datenbankprogrammierung 5
S Java Access Arbeitsgruppendatei Datenbankprogrammierung 2
S Zugriff auf eine große Datenmenge von MS Access per JDBC Datenbankprogrammierung 11
S Access und Java, aber wie? Datenbankprogrammierung 4
N Hilfe ! Mein Applet bekommt ein Access-Denied von MySQL Datenbankprogrammierung 7
G Doppeleinträge in Access auf anderem Weg verhindern. Datenbankprogrammierung 4
T Zugriff auf MS-Access-DB ist grottenlangsam. Normal? Datenbankprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben