1. Um konkret zu werden, müsste man einmal deine Klasse Datenanbindung sehen. Irgendwo hast du wohl vergessen ein Objekt zu initialisieren.
2. Warum protected? private reicht doch auch. (Es sei denn zu lässt ne Klasse von dieser Klasse erben, dann vergiss das)
Irgendwo ist es gehüpft wie gesprungen, da du ja immer ne Referenz auf diese Objekte hast.
Problem/zeitdruck: Kunden-db(vector) Und Suche Kunden-DB
Anzeige
#17
geschrieben 19. Juli 2005 - 13:12
Zitat
ch ruf erst in der Main über die Instanz die auswahl() der Kunden auf, von dort aus wähl ich ebenfalls die 1 um nen Kunden einzulesen, dann springt er an die rote Stelle und liefert ne NullpointerException. Warum?
Weil db1 == null oder db1.con == null?
Zitat
muss ich diese stmt, con, rs (blau markiert) immer als protected oben in der Klasse haben oder wäre es geschickter ich leg ne Datenbankanbindung-Instanz (dort sind Con, stmt usw. deklariert) an und greif immer über diese darauf zurück?
Letzteres.
Zitat
Instanz anlegen, oder?
Ein Singleton wäre das besser.
Sprich: Datenbankanbindung als abstract deklarieren, mit einer statischen Methode getInstance, die eine eindeutige Instanz dieser Klassen zurückliefert.
Zitat
Bemerke: es gibt noch Artikel, Lieferanten etc.. da würd ich das ja immer wieder deklarieren, was eigentlich net stimmen kann, oder?
Wie wär's, wenn du eine generische Methode schreibst, die alles vereint?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#18
geschrieben 19. Juli 2005 - 18:01
Hey,
ja das mit dem abstract ist korrekt, hatte ich auch vor, aber versteh das net so ganz. Und aufgrund meines Zeitproblems muss ich eben davon abstand nehmen und einfach funktionalitäts bzw. programmierstil einbußen in kauf nehmen.
könnte ich es dir mal schicken und du kannst schauen, wo bei der datenbankanbindung was schief läuft?!
Wer mir helfen will, bitte Mail hier rein oder an <entfernt> schreiben.
Wär euch echt dankbar! Ich löcher euch auch net zu arg, aber muss bis heut Abend die Verwaltung lauffähig haben und bin glaub recht kurz davor.
ja das mit dem abstract ist korrekt, hatte ich auch vor, aber versteh das net so ganz. Und aufgrund meines Zeitproblems muss ich eben davon abstand nehmen und einfach funktionalitäts bzw. programmierstil einbußen in kauf nehmen.
könnte ich es dir mal schicken und du kannst schauen, wo bei der datenbankanbindung was schief läuft?!
Wer mir helfen will, bitte Mail hier rein oder an <entfernt> schreiben.
Wär euch echt dankbar! Ich löcher euch auch net zu arg, aber muss bis heut Abend die Verwaltung lauffähig haben und bin glaub recht kurz davor.
#19
geschrieben 20. Juli 2005 - 01:32
hmm jo meiner einer hängt noch am selben problem.
gut das blaue sollte ich wohl über Instanzen lösen, denke ich.
Warum des con aber null ist, weiß ich nicht. Ihr vielleicht?
Hier noch die Klasse, die meine DB-Anbindung macht:
Was passt da nicht? Langsam wirds echt dringend bei mir, pls help.
gut das blaue sollte ich wohl über Instanzen lösen, denke ich.
Warum des con aber null ist, weiß ich nicht. Ihr vielleicht?
Hier noch die Klasse, die meine DB-Anbindung macht:
public class Datenbankanbindung { protected Statement stmt = null; protected Connection con; protected ResultSet rs = null; /** Creates a new instance of Datenbankanbindung */ public Datenbankanbindung() { } public void connect() throws Exception{ try { String url = "jdbc:odbc:xyz"; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection(url); System.out.println("Connect erfolgreich!"); // stmt = con.createStatement(); // rs=stmt.executeQuery("SELECT Firma, Kunden-CODE FROM Kunden"); // // while (rs.next()) { // String kundencode=rs.getString(1); // String firma=rs.getString(2); // System.out.println(kundencode+"\t"+firma); // } // stmt.close(); //con.close(); } catch (Exception e) { System.out.println("Fehler bei der Datenbankanbindung!"+e.getMessage()); } } }
Was passt da nicht? Langsam wirds echt dringend bei mir, pls help.
Dieser Beitrag wurde von mubbelbubbel82 bearbeitet: 20. Juli 2005 - 01:33
#20
geschrieben 20. Juli 2005 - 14:15
Es ist null, weil du es mit null initialisierst und es nie ändertst - du rufst ja nirgendwo connect() auf. Außerdem, wie willst du über db1.con auf eine als protected deklarierte Variable zugreifen? Und wieso "throws Exception", wenn du doch alles catchsts und nix propagierst?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#21
geschrieben 20. Juli 2005 - 15:56
ich versteh bei deiner antwort nur bahnhof?! ähm konkret pls!!!
rumprobieren tu ich schon seit nem tag jetzt.
Wieso ändere ich es nie?
con=DriverManager..... ist das nix?
beim Resultset hab ich nun das selbe bzw. ein ähnliches Problem, heeelp. Bin eh schon fast durchgerasselt..
nur weil db1.connect() hier nirgends aufgerufen wird... naja es wird in der main() aufgerufen.
jo das Problem hab ich vor 2h gelöst: db1.connect() stand in der main übrigens.
aber es geht weiter... die Zeit drängt echt tierisch, aber wenn ich das mal gelöst habe, dann bin ich erheblich weiter und es ist licht am ende. also bitte bitte angucken.
Was geht: Kunde einlesen
nicht geht: Rest
Es gibt PRobleme in der rot markierten Zeile. Ein Fehler, dass 2 Parameter erwartet wurden, aber zu wenige geliefert oder so!? Warum und was muss ich fixen? KAnns wer fixen?
Hab dafür noch bis heute 24 Uhr, dann ist eh alles vorbei. :-(
Geh ich richtig in der annahme, dass anlegen funktioniert?
dass löschen, ändern, ausgebe, suchen genau nach dem selben schema funktionieren?
sprich: wenn ich diesen resultset einmal zum laufen habe, dann ist es mehr oder minder copy&paste. die sql statements dazu kann ich, aber es funktioniert halt nicht, alle kunden aus der access-db auszugeben.... bitte helft.
rumprobieren tu ich schon seit nem tag jetzt.
Wieso ändere ich es nie?
con=DriverManager..... ist das nix?
beim Resultset hab ich nun das selbe bzw. ein ähnliches Problem, heeelp. Bin eh schon fast durchgerasselt..
nur weil db1.connect() hier nirgends aufgerufen wird... naja es wird in der main() aufgerufen.
jo das Problem hab ich vor 2h gelöst: db1.connect() stand in der main übrigens.
aber es geht weiter... die Zeit drängt echt tierisch, aber wenn ich das mal gelöst habe, dann bin ich erheblich weiter und es ist licht am ende. also bitte bitte angucken.
public class Datenbankanbindung { protected Statement stmt = null; protected static Connection con; protected ResultSet rs = null; /** Creates a new instance of Datenbankanbindung */ public Datenbankanbindung() { } public void connect() throws Exception{ try { String url = "jdbc:odbc:fake"; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); con=DriverManager.getConnection(url,"unknown","unknown"); if(con != null) System.out.println("Connect erfolgreich!"); .... //nur noch catch anweisungen
package Projekt; import java.sql.*; import Prog1Tools.*; public class Kunden { protected String sql; protected PreparedStatement stmt; protected ResultSet rs; protected Connection con; protected Statement statement; /** Kunden Standardkonstruktor */ public Kunden() { } /** Methode, die das Kundenauswahlmenü zeigt zur Steuerung der Kundenoperationen */ public void auswahlKunde() throws Exception{ try{ /** Instanz um auf die Klasse Kundensuche zu kommen und dort Einträge zu suchen */ Kundensuche ks=new Kundensuche(); int kundeauswahl; do{ kundeauswahl=IOTools.readInteger("Was tun?\n(1) Kunden anlegen (2) Kunden anzeigen (3) Kunden suchen nach KNR (4) Kunden suchen nach Name (5) Kunde ändern (6) Kunde löschen (7) HOME \n "); switch(kundeauswahl){ case 1: anlegenKunde(); //Kunde einlesen break; case 2: ausgebenKunde(); //Kunden aus der DB holen break; case 3: ks.suchenKnr(); //nach Knr suchen break; case 4: ks.suchenKunde(); //nach Name suchen break; //case 5: kvwm.main(); //home: zurück zum Ursprungsmenü //break; case 6: ändernKunde(); //Datensatz ändern break; case 7: löschenKunde(); //Datensatz löschen break; default: System.out.println("Programm wurde abgebrochen!"); break; } }while(kundeauswahl<1 && kundeauswahl>7); } catch(Exception e){ System.out.println(e.getMessage()); } } /** Kunden einlesen und Eintrag in die Datenbank*/ public void anlegenKunde() throws SQLException{ // funktioniert wunderbar try{ Datenbankanbindung db1=new Datenbankanbindung(); PreparedStatement stmt=db1.con.prepareStatement("INSERT INTO Kunden VALUES (?,?,?,?,?,?,?,?,?,?,?)"); //11 Attribute für nen Kunde, die in der bestehenden Tabelle stehen String kundencode=IOTools.readString("Kunden-Code: "); String firma=IOTools.readString("Firma: "); String kontaktperson=IOTools.readString("Kontaktperson: "); String position=IOTools.readString("Position: "); String strasse=IOTools.readString("Strasse: "); String ort=IOTools.readString("Ort: "); String region=IOTools.readString("Region: "); String plz=IOTools.readString("Postleitzahl: "); String land=IOTools.readString("Land: "); String telefon=IOTools.readString("Telefon: "); String telefax=IOTools.readString("Telefax: "); stmt.setString(1,kundencode); stmt.setString(2,firma); stmt.setString(3,kontaktperson); stmt.setString(4,position); stmt.setString(5,strasse); stmt.setString(6,ort); stmt.setString(7,region); stmt.setString(8,plz); stmt.setString(9,land); stmt.setString(10,telefon); stmt.setString(11,telefax); stmt.executeUpdate(); stmt.close(); db1.con.close(); System.out.println("Kunde erfolgreich angelegt!"); } catch(Exception e){ System.out.println("Fehler in anlegenKunde()"+e.getMessage()); } } /** Kunden ausgeben aus der Datenbank, kompletter Kundenstamm */ [COLOR="Red"] public void ausgebenKunde() throws SQLException{[/COLOR] try { // PreparedStatement stmt; Datenbankanbindung db1=new Datenbankanbindung(); statement=db1.con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONC UR_UPDATABLE); [COLOR="Red"] rs=statement.executeQuery("SELECT Kunden-Code, Firma, Kontaktperson, Position, Strasse, Ort, Region, Land, Telefon, Telefax FROM Kunden");[/COLOR] rs.beforeFirst(); while(rs.next()){ System.out.println(rs.getString(1)+"\t"+rs.getString(2)); //1=Kunden-Code; 2=Firma } stmt.close(); System.out.println("Kunden erfolgreich ausgegeben!"); }catch(Exception e){ System.out.println("Fehler in Methode: "+e.getMessage()); } } /** einzelne Datensätze von Kunden ändern */ public void ändernKunde(){ try { String firmenname=IOTools.readString("richtiger Firmenname: "); String kundenid=IOTools.readString("Änderung welches Kunden(ID)? "); sql="UPDATE Kunden SET Firma="+firmenname+" WHERE Kunden-Code="+kundenid; rs=stmt.executeQuery(sql); } catch(Exception e){ System.out.println(e.getMessage()); } } /** einzelne Datensätze von Kunden löschen*/ public void löschenKunde(){ try{ String id=IOTools.readString("Welchen Kunden(ID) wollen sie löschen? "); rs=stmt.executeQuery("SELECT Kunden-Code,Firma FROM Kunden"); while(rs.next()){ String kundencode=rs.getString("Kunden-Code"); //1,2? String firma=rs.getString("Firma"); } }catch (Exception e){ System.out.println(e.getMessage()); } } }
Was geht: Kunde einlesen
nicht geht: Rest
Es gibt PRobleme in der rot markierten Zeile. Ein Fehler, dass 2 Parameter erwartet wurden, aber zu wenige geliefert oder so!? Warum und was muss ich fixen? KAnns wer fixen?
Hab dafür noch bis heute 24 Uhr, dann ist eh alles vorbei. :-(
Geh ich richtig in der annahme, dass anlegen funktioniert?
dass löschen, ändern, ausgebe, suchen genau nach dem selben schema funktionieren?
sprich: wenn ich diesen resultset einmal zum laufen habe, dann ist es mehr oder minder copy&paste. die sql statements dazu kann ich, aber es funktioniert halt nicht, alle kunden aus der access-db auszugeben.... bitte helft.
#22
geschrieben 20. Juli 2005 - 18:35
Zitat
Ein Fehler, dass 2 Parameter erwartet wurden, aber zu wenige geliefert oder so!? Warum und was muss ich fixen? KAnns wer fixen?
Warum liest du nicht die verdammte Javadoc? Bei Eclipse und IntelliJ reicht ein dann gar ein billiges Strg-Q, um die Doc einzublenden.
Die Anzahl und Typen der Parameter stimmen aber.
Das Problem dürfte eher sein, daß du versucht, eine statische Referenz nicht-statisch zu instanziieren.
Datenbankanbindung db1 = new Datenbankanbindung(). db1.con.blah
->
Datenbankanbindung.con.blah, ohne Konstruktor
Zitat
con.close()
Und warum schließt du die Connection gleich wieder?
Konnichiwa. Manga wo shitte masu ka? Iie? Gomenne, sonoyouna koto ga tabitabi arimasu. Mangaka ojousan nihongo doujinshi desu wa 'Clamp X', 'Ayashi no Ceres', 'Card Captor Sakura', 'Tsubasa', 'Chobits', 'Sakura Taisen', 'Inuyasha' wo 'Ah! Megamisama'. Hai, mangaka gozaimashita desu ni yuujin yori.
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#23
geschrieben 21. Juli 2005 - 22:33
Ich bedank mich recht herzlich für die hier angebotene Hilfestellung. Hab es ja eigentlich eh immer selbst geschafft. Nun kommts zur Abgabe des ganzen in 3 Tagen.
Könnte bitte der Mod das Thema löschen, nicht dass da mir jmd. nen Strick dreht, wenn ers findet?! Bitte lösch einfach den Thread oder blende ihn aus.
Danke sehr!
Könnte bitte der Mod das Thema löschen, nicht dass da mir jmd. nen Strick dreht, wenn ers findet?! Bitte lösch einfach den Thread oder blende ihn aus.
Danke sehr!
#24
geschrieben 23. Juli 2005 - 18:20
Hallooooo?
Das kann doch net wahr sein, geschieht das bald!?!
Das kann doch net wahr sein, geschieht das bald!?!