Problem/zeitdruck: Kunden-db(vector) Und Suche Kunden-DB
#16
geschrieben 19. Juli 2005 - 13:05
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.
Anzeige
#17
geschrieben 19. Juli 2005 - 13:12
Zitat
Weil db1 == null oder db1.con == null?
Zitat
Letzteres.
Zitat
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
Wie wär's, wenn du eine generische Methode schreibst, die alles vereint?

Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#18
geschrieben 19. Juli 2005 - 18:01
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
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

Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#21
geschrieben 20. Juli 2005 - 15:56
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
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
Und warum schließt du die Connection gleich wieder?

Ja, mata ne!
(For sending email please use OpenPGP encryption and signing. KeyID: 0xA0E28D18)
#23
geschrieben 21. Juli 2005 - 22:33
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
Das kann doch net wahr sein, geschieht das bald!?!

Hilfe
Neues Thema
Antworten

Nach oben

