Hallo,
dies ist schon mein dritter Thread zum Thema Dantenbanken. Allerdings hab ich in den vorherigen Threads bisher die Fehler gefunden, oder eine andere Methode probiert. Nun ja, nun hab ich aber das Problem, dass die Daten, wie es scheint, nicht gespeichert werden, da beim Programmstart die Daten wieder auf null sind. Ich finde den Fehler einfach nicht, trotz dessen, dass ich die Datenbank praktisch von meinem Buch "abgeschrieben" habe. Ich hoffe mir kann jemand weiterhelfen. Wenn ich für dieses Problem die Lösung finde, lass ich euch fürs erste mit Datenbanken in Ruhe
. Aber wenn ich die Lösung nicht finde, lässt es mir keine Ruhe.
Also hier ist der Code/die Datenbank Klasse:
Ich persönlich glaube, dass der Fehler in der Methode "registerConnectionInMain" liegt, da da die Datenbank erstellt und "initialisiert" liegt, aber ich kann mich auch täuschen.
Ich bin froh über jegliche Art von Hilfe. Danke!
dies ist schon mein dritter Thread zum Thema Dantenbanken. Allerdings hab ich in den vorherigen Threads bisher die Fehler gefunden, oder eine andere Methode probiert. Nun ja, nun hab ich aber das Problem, dass die Daten, wie es scheint, nicht gespeichert werden, da beim Programmstart die Daten wieder auf null sind. Ich finde den Fehler einfach nicht, trotz dessen, dass ich die Datenbank praktisch von meinem Buch "abgeschrieben" habe. Ich hoffe mir kann jemand weiterhelfen. Wenn ich für dieses Problem die Lösung finde, lass ich euch fürs erste mit Datenbanken in Ruhe
Also hier ist der Code/die Datenbank Klasse:
Java:
public class Database {
private static CookieClickerGUI guiVarObject = new CookieClickerGUI();
private final static String CREATE_DATA_TABLE = "CREATE TABLE COOKIE_VALUES ("
+ "ID INT NOT NULL GENERATED BY DEFAULT AS IDENTITY, " + "COOKIES_PRO_KLICK INT, " + "ANZAL_COOKIES BIG INT, "
+ "PRIMARY KEY (ID) " + ")"; //Tabelle erzeugen
private final static String ADD_INSTRUCTIONS = "INSERT INTO COOKIE_VALUES VALUES (DEFAULT, ?, ?)"; //Datensätzte setzen
private static String id;
private static int cookies_Pro_Klick;
private static long anzahl_Cookies;
public static int getCookies_Pro_Klick() {
return cookies_Pro_Klick;
}
public static void setCookies_Pro_Klick(int cookies_Pro_Klick) {
Database.cookies_Pro_Klick = cookies_Pro_Klick;
}
public static long getAnzahl_Cookies() {
return anzahl_Cookies;
}
public static void setAnzahl_Cookies(int anzahl_Cookies) {
Database.anzahl_Cookies = anzahl_Cookies;
}
private static Connection createConnection() throws ClassNotFoundException, SQLException {
Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
Connection connection = DriverManager.getConnection("jdbc:derby:database/cookie;create=true");
return connection;
}
public static void registerConnectionInMain() { //bei Programmstart werden alle Daten in die GUI eingetragen
try (Connection connection = createConnection()) {
DatabaseMetaData metaData = connection.getMetaData();
ResultSet tables = metaData.getTables(null, "APP", "COOKIE_VALUES", null);
if (!tables.next()) { //Nur erstellen wenn Datenbank noch nicht vorhanden ist
Statement instructions = connection.createStatement();
instructions.executeUpdate(CREATE_DATA_TABLE);
instructions.close();
}
PreparedStatement queryInstructions = connection.prepareStatement("SELECT * FROM COOKIE_VALUES"); //Von der Datenbank COOKIE_VALUES Daten holen
ResultSet resultSet = queryInstructions.executeQuery();
while (resultSet.next()) {
id = resultSet.getString("ID");
cookies_Pro_Klick = resultSet.getInt("COOKIES_PRO_KLICK"); //Daten holen
anzahl_Cookies = resultSet.getLong("ANZAL_COOKIES"); //Daten holen
guiVarObject.setCookiesProClick(cookies_Pro_Klick); //Daten in GUI schreiben
guiVarObject.setAnzahlCookies(anzahl_Cookies); //Daten in GUI schreiben
}
} catch (ClassNotFoundException e) {
System.err.println("Database driver not found!");
} catch (SQLException e) {
System.err.println("SQL error");
e.printStackTrace();
}
}
public static void registerConnectionInListener() { //Daten werden in der Datenbank bei jedem klick auf den Cookie aktualisiert/mit den neuen Daten überschrieben
try (Connection connection = createConnection()) {
PreparedStatement insertStatement = connection.prepareStatement(ADD_INSTRUCTIONS);
insertStatement.setInt(1, guiVarObject.getCookiesProClick()); //aus Programm (GUI) holen, in Datenbank setzten
insertStatement.setLong(2, guiVarObject.getAnzahlCookies()); //aus Programm (GUI) holen, in Datenbank setzten
insertStatement.executeUpdate();
} catch (ClassNotFoundException e) {
System.err.println("Database driver not found!");
} catch (SQLException e) {
System.err.println("SQL error");
e.printStackTrace();
}
}
public static String getId() {
return id;
}
public static void setId(String id) {
Database.id = id;
}
}
Ich bin froh über jegliche Art von Hilfe. Danke!