Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo,
ich als totaler Java-Anfänger habe ein Problem....
ich habe 2 Klassen in 2 versch. Java-Datein
die eine Klasse fungiert als Konstructor für die andere:
[Java]public class FehlerAusgeben
{
public static void main ( String args[] )
{
// set variable
ErrorInterface ErrId = new ErrorInterface();
ErrId.sUserLang = "DE";
ErrId.iErrorId = 1000;
//start load driver
ErrorInterface LoDriv = new ErrorInterface();
LoDriv.DbDriverLoad();
im Konstructor angegebenen Werte möchte ich gerne an die andere Klasse übergeben.
Hier der Code der anderen Klasse:
[Java]
/**
*
*/
/**
* @author Conis-PC02
*
*/
import java.sql.*;
public class ErrorInterface
{
int iErrorId;
String sUserLang;
//load driver to connect to Database
public void DbDriverLoad ()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch (Exception e)
{
System.out.println("Treiber konnte nicht geladen werden");
}
}
//get error-id from system and get right error-text
public void ErrorIdSelect ()
{
try
{
Connection con = DriverManager.getConnection("jdbc:mysql://*****/****","****","****");
Statement stmt = con.createStatement();
ResultSet rslt = stmt.executeQuery("SELECT * FROM errors WHERE error_id = "+iErrorId+"");
while (rslt.next())
{
//get user-language from system for correct error-text-language
if(sUserLang.equals("DE"))
{
System.out.println(rslt.getString(5));
}
else if (sUserLang.equals("FR"))
{
System.out.println(rslt.getString(6));
}
else if (sUserLang.equals("ES"))
{
System.out.println(rslt.getString(7));
}
else
{
//set default language if user-language not exist / default is english
System.out.println(rslt.getString(4));
}
}
stmt.close();
con.close();
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
}
}
[/Java]
leider werden die Werte nicht übernommen/übergeben... als ergebnis erhalte ich ein leeres Resultat....
Dein Fehler ist, dass Du drei verschiedene Objekte erzeugst. Sollte wohl eher so aussehen:
[Java]public class FehlerAusgeben {
public static void main ( String args[] ) {
// set variable
ErrorInterface errorInterface = new ErrorInterface();
errorInterface.sUserLang = "DE";
errorInterface.iErrorId = 1000;
Der einzige in Deinem Programm vorhandene Konstruktor ist in Zeile 30ff deklariert. Ein Konstruktor erzeugt eine Instanz einer Klasse. Mit jedem Aufruf entsteht genau eine Instanz. Da Du in FehlerAusgeben in den Zeilen 6, 1 und 15 drei Aufrufe hast, entstehen auch drei verschiedene Instanzen.
Beispiel in Zeile 6: Du erzeugst eine ErrorInterface-Instanz. Deren Konstruktor läuft durch (also der ganze Code zwischen Zeile 30 und 66. Erst danach in Zeile 7 (oben) setzt Du die Error-ID. Da kann der bereits durchgelaufene Konstruktor auch nix machen.
Variablen klein schreiben (also z.B. "errId" statt "ErrId" in Zeile 6)!
Methoden klein schreiben (also z.B. "errorIdSelect()" statt "ErrorIdSelect()")!
Das Wort "Interface" sollte man in der Regel nicht für Klassen benutzen. Ein Interface ist in Java etwas anderes.
PS: Das Wort Konstruktor bezeichnet etwas anderes. Eine Klasse ist niemals Konstruktor einer anderen. Wie auch immer: Entweder nur 'c's oder nur 'k's. ;-)
Eine Klasse "fungiert nicht als Konstruktor" für eine andere. Du erzeugst dreimal ein neues Objekt, und dann wunderst du dich, warum er im dritten Objekt nicht die ErrorID lesen kann, die du im ersten Objekt gesetzt hast. Dementsprechend ist ErrorID gleich 0 (als Default-Wert) und die Abfrage findet nichts.
So sollte es gehen, aber einen Schönheitspreis gewinnst du damit nicht:
Java:
public class FehlerAusgeben
{
public static void main ( String args[] )
{
// set variable
ErrorInterface errId = new ErrorInterface();
errId.sUserLang = "DE";
errId.iErrorId = 1000;
errId.DbDriverLoad();
errId.ErrorIdSelect();
}
}
Methoden und Variablen schreibt man klein, und eine Klasse nennt man nicht "SonstwieInterface".
vielen Dank... jetzt wo ich verstanden habe was ich für Fehler gemacht habe, seh ich erst richtig wie blöd die Fehler eig. waren.
Ich habe jetzt die Klasse umbenannt und auch alle anderen Beschriftungsfehler korrigiert.
Es ist ja von mir so gedacht, anhand einer eindeutigen ID und der Länderkennzahl einen Fehlertext auszugeben. Durch Euch habe ich es hinbekommen das die ID übernommen wird...
jetzt muss ich es nur noch packen das der Text in (in richtiger Sprache) übergeben wird... ma guggen.....wenns nicht klappt hört Ihr wieder von mir....
ich schaffe es einfach nicht, dass der Wert von sIdText übergeben wird an z.B. eine andere Java Datei...bzw. weiß ich noch nichtmal wie ich das anstellen könnte....
hier noch mal mein Quelltext....
[Java]
/**
*
*/
/**
* @author Conis-PC02
*
*/
import java.sql.*;
public class TextFromDb
{
int iTextId;
String sUserLang;
String sIdText;
String sUserPermissions;
//load driver to connect to Database
public void dbDriverLoad ()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch (Exception e)
{
System.out.println("Treiber konnte nicht geladen werden");
}
}
//get error-id from system and get right error-text
public void dbConnection ()
{
try
{
Connection con = DriverManager.getConnection("jdbc:mysql://schlegel-immobilien.de/d00b582d","d00b582d","qaNuKpLLQ3zeKmB6");
Statement stmt = con.createStatement();
ResultSet rslt = stmt.executeQuery("SELECT * FROM errors WHERE error_id = "+iTextId+" AND status_entry = 'active'");