217 lines
6.9 KiB
Java
217 lines
6.9 KiB
Java
|
package application;
|
|||
|
|
|||
|
import java.sql.Connection; //f<>r Datenbank
|
|||
|
import java.sql.DriverManager; //f<>r Datenbank
|
|||
|
import java.sql.PreparedStatement; //f<>r Datenbank
|
|||
|
import java.sql.ResultSet; //f<>r Datenbank
|
|||
|
import java.sql.SQLException; //f<>r Datenbank
|
|||
|
import java.sql.Statement; //f<>r Datenbank
|
|||
|
import java.io.File;//f<>r Dateien einlesen
|
|||
|
|
|||
|
class DBController {
|
|||
|
|
|||
|
@SuppressWarnings("unused")
|
|||
|
private MainWindowController mainWindowController;
|
|||
|
private static final DBController dbcontroller = new DBController();
|
|||
|
private static Connection connection;
|
|||
|
private static final String DB_PATH = System.getProperty("user.dir") + "/" + "Homeflix.db"; // der Pfad der Datenbank-Datei
|
|||
|
private String path;
|
|||
|
File f;
|
|||
|
File file[]; //ArrayList f<>r die Dateien
|
|||
|
|
|||
|
static {
|
|||
|
try {
|
|||
|
Class.forName("org.sqlite.JDBC"); //Datenbanktreiber
|
|||
|
} catch (ClassNotFoundException e) {
|
|||
|
System.err.println("Fehler beim Laden des JDBC-Treibers");
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public static void main(String input) {
|
|||
|
DBController datenbank = DBController.getInstance(); //neues Datenbank-Objekt wird erstellt
|
|||
|
datenbank.setPath(input); // Pfad zuweisen
|
|||
|
datenbank.f = new File(datenbank.getPath()); // f<>r Datenbank-Datei einlesen
|
|||
|
datenbank.file = datenbank.f.listFiles(); // f<>r Datenbank-Datei einlesen
|
|||
|
datenbank.verbindeDatenbank();
|
|||
|
datenbank.fuelleDatenbank();
|
|||
|
//datenbank.defavorisieren("Frozen");
|
|||
|
//datenbank.favorisieren("Frozen");
|
|||
|
//datenbank.ausgebenTitel();
|
|||
|
//System.out.println("Pfad: " + datenbank.getPfad("Frozen"));
|
|||
|
//System.out.println("Bewertung: " + datenbank.getFavStatus("Frozen"));
|
|||
|
}
|
|||
|
|
|||
|
DBController(){
|
|||
|
}
|
|||
|
|
|||
|
private static DBController getInstance(){
|
|||
|
return dbcontroller;
|
|||
|
}
|
|||
|
// Die Datenbak wird mit Hilfe des JDBC-Treibers eingebunden
|
|||
|
public void verbindeDatenbank() {
|
|||
|
try {
|
|||
|
if (connection != null)
|
|||
|
return;
|
|||
|
System.out.println("Erstelle Verbindung zur Datenbank...");
|
|||
|
connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH);
|
|||
|
if (!connection.isClosed())
|
|||
|
System.out.println("...Verbindung hergestellt");
|
|||
|
} catch (SQLException e) {
|
|||
|
throw new RuntimeException(e);
|
|||
|
}
|
|||
|
|
|||
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
|||
|
public void run() {
|
|||
|
try {
|
|||
|
if (!connection.isClosed() && connection != null) {
|
|||
|
connection.close();
|
|||
|
if (connection.isClosed())
|
|||
|
System.out.println("Verbindung getrennt");
|
|||
|
}
|
|||
|
} catch (SQLException e) {
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
});
|
|||
|
}
|
|||
|
// Die Dateien werden in die Datenbank geschrieben
|
|||
|
public void fuelleDatenbank() {
|
|||
|
|
|||
|
try {
|
|||
|
System.out.println("Erstelle Eintr<74>ge");
|
|||
|
Statement stmt = connection.createStatement();
|
|||
|
stmt.executeUpdate("DROP TABLE IF EXISTS filme;");
|
|||
|
stmt.executeUpdate("CREATE TABLE filme (titel, pfad, bewertung);"); // Tabelle "filme" und die Spalten "titel", "pfad", "bewertung" erstellen
|
|||
|
|
|||
|
PreparedStatement ps = connection.prepareStatement("INSERT INTO filme VALUES (?, ?, ?);"); // SQL Befehl
|
|||
|
|
|||
|
//System.out.println(file.length);
|
|||
|
|
|||
|
for(int i=0;i!=file.length;i++) // Geht alle Dateien im Verzeichniss durch
|
|||
|
{
|
|||
|
//System.out.println(file[i].getName());
|
|||
|
ps.setString(1, ohneEndung(file[i].getName())); // definiert Name als String in der ersten Spalte
|
|||
|
ps.setString(2,file[i].getName()); // definiert Pfad als String in der zweiten Spalte
|
|||
|
ps.setInt(3, 0); // definiert Bewertung als Integer in der dritten Spalte
|
|||
|
ps.addBatch(); // f<>gt den Eintrag hinzu
|
|||
|
}
|
|||
|
|
|||
|
connection.setAutoCommit(false);
|
|||
|
ps.executeBatch(); // scheibt alle Eintr<74>ge in die Datenbank
|
|||
|
connection.setAutoCommit(true);
|
|||
|
//connection.close();
|
|||
|
} catch (SQLException e) {
|
|||
|
System.err.println("Konnte nicht ausgef<65>hrt werden");
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
public void ausgeben(){
|
|||
|
System.out.println("Eintr<EFBFBD>ge ausgeben");
|
|||
|
try {
|
|||
|
Statement stmt = connection.createStatement();
|
|||
|
mainWindowController = new MainWindowController();
|
|||
|
ResultSet rs = stmt.executeQuery("SELECT * FROM filme;");
|
|||
|
while (rs.next()) {
|
|||
|
// MainWindowController mainWindowController = new MainWindowController();
|
|||
|
}
|
|||
|
//rs.close();
|
|||
|
// mainWindowController.initTabel();
|
|||
|
|
|||
|
|
|||
|
} catch (SQLException e) {
|
|||
|
System.err.println("Konnte nicht ausgef<65>hrt werden");
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
// Kontroll Methode, ob ein Film wirklich in der Datenbank ist
|
|||
|
public String getTitel(String name){
|
|||
|
try {
|
|||
|
Statement stmt = connection.createStatement();
|
|||
|
ResultSet rs = stmt.executeQuery("SELECT titel, pfad FROM filme WHERE titel = '"+name+"';" );
|
|||
|
return rs.getString("titel");
|
|||
|
} catch (SQLException e) {
|
|||
|
System.err.println("Konnte nicht ausgef<65>hrt werden");
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
return "Error 404";
|
|||
|
}
|
|||
|
// gibt den Pfad eines bestimmten Films
|
|||
|
public String getPfad(String name){
|
|||
|
try {
|
|||
|
Statement stmt = connection.createStatement();
|
|||
|
ResultSet rs = stmt.executeQuery("SELECT titel, pfad FROM filme WHERE titel = '"+name+"';" ); //SQL Befehl
|
|||
|
return rs.getString("pfad");
|
|||
|
} catch (SQLException e) {
|
|||
|
System.err.println("Konnte nicht ausgef<65>hrt werden");
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
return "Error 404";
|
|||
|
}
|
|||
|
// gibt die Favorisierung eines bestimmten Films
|
|||
|
public boolean getFavStatus(String name){
|
|||
|
try {
|
|||
|
Statement stmt = connection.createStatement();
|
|||
|
ResultSet rs = stmt.executeQuery("SELECT titel, bewertung FROM filme WHERE titel = '"+name+"';" ); //SQL Befehl
|
|||
|
System.out.println(rs.getInt("bewertung"));
|
|||
|
if((rs.getInt("bewertung")) == 1){
|
|||
|
return true;
|
|||
|
}
|
|||
|
else{
|
|||
|
return false;
|
|||
|
}
|
|||
|
} catch (SQLException e) {
|
|||
|
System.err.println("Konnte nicht ausgef<65>hrt werden");
|
|||
|
e.printStackTrace();
|
|||
|
return false;
|
|||
|
}
|
|||
|
}
|
|||
|
// setzt die Defavorisierung eines bestimmten Films
|
|||
|
public void defavorisieren(String name){
|
|||
|
System.out.println("setze Bewertung");
|
|||
|
try {
|
|||
|
Statement stmt = connection.createStatement();
|
|||
|
String sql = ("UPDATE filme SET bewertung=0 WHERE titel='"+name+"';"); //SQL Befehl
|
|||
|
stmt.executeUpdate(sql);
|
|||
|
connection.setAutoCommit(false);
|
|||
|
connection.setAutoCommit(true);
|
|||
|
} catch (SQLException e) {
|
|||
|
System.err.println("Konnte nicht ausgef<65>hrt werden");
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
// setzt die Favorisierung eines bestimmten Films
|
|||
|
public void favorisieren(String name){
|
|||
|
System.out.println("setze Bewertung");
|
|||
|
try {
|
|||
|
Statement stmt = connection.createStatement();
|
|||
|
String sql = ("UPDATE filme SET bewertung=1 WHERE titel='"+name+"';"); //SQL Befehl
|
|||
|
stmt.executeUpdate(sql);
|
|||
|
connection.setAutoCommit(false);
|
|||
|
connection.setAutoCommit(true);
|
|||
|
} catch (SQLException e) {
|
|||
|
System.err.println("Konnte nicht ausgef<65>hrt werden");
|
|||
|
e.printStackTrace();
|
|||
|
}
|
|||
|
}
|
|||
|
//entfernt die Endung
|
|||
|
private static String ohneEndung (String str) {
|
|||
|
|
|||
|
if (str == null) return null;
|
|||
|
int pos = str.lastIndexOf(".");
|
|||
|
if (pos == -1) return str;
|
|||
|
return str.substring(0, pos);
|
|||
|
}
|
|||
|
|
|||
|
public String getPath() {
|
|||
|
return path;
|
|||
|
}
|
|||
|
|
|||
|
public void setPath(String path) {
|
|||
|
this.path = path.replace("\\", "\\\\");
|
|||
|
}
|
|||
|
}
|