Zum Inhalt springen

Einen Datensatz in Java zurückgeben an MySQL


Clevemayer

Empfohlene Beiträge

Hallo Leute,

entschuldigt ich bin ein armer Anfänger in Java, ehrlich gesagt habe ich kaum mit Java bisher gearbeitet, aber mein Cousin studiert und muss eine WaWi in Java programmieren, das ganze ist sehr einfach gestrickt.

Ich hab mit dem Gedanken gespielt MySQL einzubinden, so kann er sich seine ganzen Objekte Sparen, weilw ir das ganze in Tabellen abbilden (Kunde, Artikelstammdaten, Rechnungs-Nr, Rechnungspositionen).

Ich hänge jetzt fest bei den prepared Statements. Ich kann Datensätze aus der Datenbank auslesen, aber wie kann ich einen Datensatz per Insertbefehl in die Datenbank einfügen?

Hier ein Beispiel, bei dem ich einen neuen Kunden einpflege.

Primary ist die KundenNr in der Tabelle Kunde aus der Datenbank WaWi, connectet wird über JDBC. Es ist bestimmt ein dämlicher FEhelr den ich übersehe, aber ich komm einfach nicht weiter und finde den Fehler nicht.

Hier habe ich den Code auskommentiert der mir Datensätze aus der Datenbank zurückgeben kann

Anbei der Src-Code:

public static void main(String [] args) throws Exception{

//// Kunde_anlegen anlegen = new Kunde_anlegen();

//// anlegen.anlegen();

//////

// }

String vorname;

String nachname;

String Geschlecht;

int Geburtsdatum;

int Hausnummer;

int PLZ;

String strasse;

// int Kundennr;

String ort;

Class.forName("com.mysql.jdbc.Driver");

Connection con = DriverManager.getConnection( "jdbc:mysql://localhost:3306/wawi", "?", "?");

PreparedStatement Neukunde = con.prepareStatement("insert into kunde(vorname, nachname, geschlecht, geburtsdatum, hausnummer, plz, strasse, ort) Values (?, ?, ?, ?, ?, ?, ?, ?");

vorname = Stdin.readlnString("Bitte geben Sie den Vornamen ein");

nachname = Stdin.readlnString("Bitte geben Sie den Nachnamen ein");

Geburtsdatum = Stdin.readInt("Bitte Geben Sie das Geburtsdatum ein nach dem Sie suchen wollen." +

"Das Format ist YYYYMMDD: ");

Geschlecht = Stdin.readlnString("Bitte geben Sie das Geschlecht ein" +"Das Format ist m oder w");

strasse = Stdin.readlnString("Bitte geben Sie die Strasse ein");

Hausnummer = Stdin.readInt("Bitte geben Sie die Hausnummer eub");

PLZ = Stdin.readInt("Bitte geben Sie die PLZ ein");

ort = Stdin.readlnString("Bitte geben Sie den Ort ein");

//PreparedStatement ausgabe = con.prepareStatement(" select * from Kunde where voname = " + vorname+" and nachname =" + nachname+"and Geschlecht ="+Geschlecht+ "and Geburtsdatum = "+Geburtsdatum);

// ("insert into Kunde (vorname, nachname, geschlecht, geburtsdatum, Hausnummer, PLZ, strasse, ort) Values(" + vorname +", " + nachname+", "+Geschlecht+", "+ Geburtsdatum+", "+ Hausnummer +", "+ PLZ+ ", "+ strasse + ", " + ort +")");

Neukunde.setString( 1, vorname );

Neukunde.setString(2, nachname);

Neukunde.setString(3, Geschlecht);

Neukunde.setInt(4, Geburtsdatum);

Neukunde.setInt(5, Hausnummer);

Neukunde.setInt(6, PLZ);

Neukunde.setString(7, strasse);

Neukunde.setString(8, ort);

Neukunde.executeQuery();

//ResultSet result = ausgabe.executeQuery();

//while (result.next()) {

// System.out.println(result.getString(1) + " " + result.getString(2) + " " + result.getString(3)+ " " + result.getString(4)+ " " + result.getString(5)+ " " + result.getString(6)+ " " + result.getString(7)+ " " + result.getString(8)+ " " + result.getString(9));

}

//}

}

Danke und MfG

Bearbeitet von Clevemayer
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

laut Javakonvention beginnen Variablennamen immer mit einem Kleinbuchstaben. Das solltest Du auch beherzigen.

Zu deinem eigentlichen Problem:

Den Insert hast Du ja schon und setzt auch die Bindvariablen richtig. Dann musst Du nur noch statt executeQuery (das wäre ein SELECT) ein execute abschicken.

Warum baust Du dein SELECT zu kryptisch zusammen?

select * from kunde where vorname=? and geschlecht=? and...

Danach per setXxx die Binds setzen wie Du es schon beim Insert gemacht hast.

Dim

PS: Fehlerbehandlung und das Schließen von Ressourcen gehört in jedes Programm.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@dr. Dmitir

Hi Danke erstmal für die Tips, aber ich bekomme immer noch diese Error-Meldung

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)

at com.mysql.jdbc.Util.getInstance(Util.java:381)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1051)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3563)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3495)

at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)

at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2113)

at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2693)

at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2102)

at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1364)

at Projektarbeit.Kunde_anlegen.main(Kunde_anlegen.java:88)

Java Result: 1

vlt. sollte ich sagen Das ich hier die Kundennr nirgends deklariere, aber ich kann sie ja auch nicht deklarieren, da die Spalte Kundennummer die ID ist und mit auto_increment automatisch vergeben werden sollte, liegt da der Fehler?

Das Prog ist ja noch in der Mache, also kommen Fehlerbehandlungen etc noch rein:)

MfG

Link zu diesem Kommentar
Auf anderen Seiten teilen

aber ich kann sie ja auch nicht deklarieren, da die Spalte Kundennummer die ID ist und mit auto_increment automatisch vergeben werden sollte, liegt da der Fehler?

Ich kenn mysql nicht besonders, aber die Fehlermeldung sagt eher, dass der Befehl an sich schon nicht geparst werden konnte.

Heißen die Spaltennamen wirklich so? Beim SELECT hast z.B. eine Verschreiber bei vorname drinnen.

Fehlerbehandlung sollte man nicht als nachrangige Aufgabe sehen, sondern als Einheit die gleichzeitig zur Programmentwicklung durchgeführt wird. Alles andere führt meistens nur zu wirr durch die Gegend geworfenen Exceptions, die mehr oder weniger sinnvoll ausgewertet werden.

Dim

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn dein Quelltext noch immer so aussieht wie im 1. Post beschrieben, dann fehlt da auf jeden Fall schonmal eine schließende Klammer in deinem Insert Befehl bei den Values.

Und bevor du die restlichen Befehle wieder reinsetzt, solltest du die auch nochmal kontrollieren. Wie dr.dimitri schon geschrieben hat, ist da auch noch mindestens ein fehler im Select Befehl.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Hilfe Jungs, sauber.

Ja ich wusste es kann nur ein Rechtschreibfehler sein, war die letzte Klammer, der Selectbefehl funktioniert an sich, das ist kein Problem, es ging nur um den Insert, bei dem Select weiss ich auch was falsch ist, da hab ich an der Syntax rum gespielt, weil ich den gerade erstellten Kunden ausgeben möchte, da die Kunden-Nr für den Anwender unsichtbar, automatisch generiert wird, er aber am ende den gesamten Datensatz sehen soll, der gerade erstellt worde, gibts dafür einen befehl? über diesen Select ist das ganze ja umständig und sicherlich nicht gerade performant.

MfG

Cleve

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Leute, danke für die Tipps, hat soweit alles funktionniert.

Jetzt hat sich aber für mich einmal die Frage gestellt, wie kann ich entitys in java mit mysql umsetzen? Gibt es da eine möglichkeit?, ich habe mal im Netz gesucht und zu MySQL habe ich nur komplizierte Wege über das verändern der db-config-Datei gefunden.

MfG

P.S.:

Das ist einfach eine Frage die mich interessiert, das Projekt mit der wawi ist soweit erledigt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...