/** * DBController for Project HomeFlix * connection is in manual commit! * TODO überprüfen ob neue filme hinzu gekommen sind */ package application; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import com.eclipsesource.json.Json; import com.eclipsesource.json.JsonArray; import com.eclipsesource.json.JsonObject; import com.eclipsesource.json.JsonValue; public class DBController { public DBController(MainWindowController m) { mainWindowController = m; } private MainWindowController mainWindowController; private String DB_PATH = System.getProperty("user.home") + "\\Documents\\HomeFlix" + "\\" + "Homeflix.db"; // der Pfad der Datenbank-Datei private List filmsdb = new ArrayList(); private List filmsAll = new ArrayList(); private List filmsDir = new ArrayList(); private List filmsStream = new ArrayList(); private List counter = new ArrayList(); Connection connection = null; public void main() { try { // create a database connection connection = DriverManager.getConnection("jdbc:sqlite:" + DB_PATH); // Statement statement = connection.createStatement(); // statement.setQueryTimeout(30); // set timeout to 30 sec. TODO don't know wath to do with this connection.setAutoCommit(false); //Autocommit to false -> manual commit is active // fuelleDatenbank(); } catch (SQLException e) { // if the error message is "out of memory", it probably means no database file is found System.err.println(e.getMessage()); } // finally { // try { // if (connection != null) // connection.close(); // } catch (SQLException e) { // // connection close failed. // System.err.println(e); // } // } } void createDatabase() { System.out.println("<=====starting loading sql=====>"); PreparedStatement ps; PreparedStatement psS; String[] entries = new File(mainWindowController.getPath()).list(); try { Statement stmt = connection.createStatement(); stmt.executeUpdate("create table if not exists film_local (rating, titel, streamUrl)"); stmt.executeUpdate("create table if not exists film_streaming (year, season, episode, rating, resolution, titel, streamUrl)"); stmt.close(); } catch (SQLException e1) { e1.printStackTrace(); } try { Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM film_local"); while (rs.next()) { filmsdb.add(rs.getString(2)); } stmt.close(); rs.close(); rs = stmt.executeQuery("SELECT * FROM film_streaming;"); while (rs.next()) { filmsdb.add(rs.getString(6)); } stmt.close(); rs.close(); }catch (SQLException ea){ //TODO } System.out.println("filme in db: "+filmsdb.size()); for(int i=0;i!=entries.length;i++){ filmsDir.add(cutOffEnd(entries[i])); } for(int v=0; v< mainWindowController.streamingData.size(); v++){ String fileName = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.get(v).getStreamUrl(); try { JsonObject object = Json.parse(new FileReader(fileName)).asObject(); JsonArray items = object.get("entries").asArray(); for (JsonValue item : items) { filmsStream.add(item.asObject().getString("titel","")); } } catch (IOException e) { e.printStackTrace(); } } filmsAll.addAll(filmsDir); filmsAll.addAll(filmsStream); System.out.println("films in directory: "+filmsAll.size()); if(filmsdb.size() == 0){ System.out.println("creating entries ..."); try{ ps = connection.prepareStatement("insert into film_local values (?, ?, ?)"); psS = connection.prepareStatement("insert into film_streaming values (?, ?, ?, ?, ?, ?, ?)"); for(int j=0;j!=entries.length;j++) // Geht alle Dateien im Verzeichniss durch { ps.setInt(1, 0); // definiert Bewertung als Integer in der dritten Spalte ps.setString(2, cutOffEnd(entries[j])); // definiert Name als String in der ersten Spalte ps.setString(3,entries[j]); // definiert Pfad als String in der zweiten Spalte ps.addBatch(); // fügt den Eintrag hinzu } if(mainWindowController.getStreamingPath().equals("")||mainWindowController.getStreamingPath().equals(null)){ System.out.println("Kein Pfad angegeben"); //falls der Pfad null oder "" ist }else{ for(int i=0; i< mainWindowController.streamingData.size(); i++){ String fileNamea = mainWindowController.getStreamingPath()+"/"+mainWindowController.streamingData.get(i).getStreamUrl(); try { JsonObject object = Json.parse(new FileReader(fileNamea)).asObject(); JsonArray items = object.get("entries").asArray(); for (JsonValue item : items) { psS.setInt(1, item.asObject().getInt("year", 0)); psS.setInt(2, item.asObject().getInt("season", 0)); psS.setInt(3, item.asObject().getInt("episode", 0)); psS.setInt(4, 0); psS.setString(5, item.asObject().getString("resolution", "")); psS.setString(6, item.asObject().getString("titel","")); psS.setString(7, item.asObject().getString("streamUrl", "")); psS.addBatch(); // fügt den Eintrag hinzu } } catch (IOException e) { e.printStackTrace(); } } } ps.executeBatch(); // scheibt alle Einträge in die Datenbank psS.executeBatch(); connection.commit(); ps.close(); psS.close(); }catch (SQLException ea) { System.err.println("Konnte nicht ausgeführt werden"); ea.printStackTrace(); } }else if(filmsdb.size() == filmsAll.size()){ for(int i=0;i maybe there is an issue now rs = stmt.executeQuery("SELECT * FROM film_streaming;"); while (rs.next()) { mainWindowController.streamData.add(new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7))); } stmt.close(); rs.close(); } catch (SQLException e) { System.err.println("Ups! an error occured!"); e.printStackTrace(); } System.out.println("<=====finished loading sql=====>"); } //refreshs the data in mainWindowController.newDaten and mainWindowController.streamData void refresh(String name,int i) throws SQLException{ System.out.println("refresh ..."); Statement stmt; try { stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM film_local WHERE titel = '"+name+"';" ); mainWindowController.newDaten.set(i, new streamUiData(1, 1, 1, rs.getDouble(1), "1", rs.getString(2), rs.getString(3))); stmt.close(); rs.close(); } catch (SQLException e) { try { stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM film_streaming WHERE titel = '"+name+"';" ); mainWindowController.streamData.set(i,new streamUiData(rs.getInt(1), rs.getInt(2), rs.getInt(3), rs.getDouble(4), rs.getString(5), rs.getString(6), rs.getString(7))); stmt.close(); rs.close(); } catch (SQLException e1) { System.err.println("Ups! an error occured!"); e1.printStackTrace(); } } } private void updateDB(){ System.out.println("updating DB ..."); for(int i=0; i