Mam jakiś sobie model klas. (klient, adress, przedmiot w relacji z zamówienie). Każda z tych klas ma swojego menagera , który odpowiada za komunikacje między wartstwą aplikacji a widokiem. Główym menagerem jest OderMenager, on rozpoczyna komunikacje z db. Następnie przekazuje utworzone statement do klasy ClientMenager.
// Wszystko co nie jest dodane jest zimportowane. public OrderMenager (){ try { Class.forName(OrderMenager.DB_DRIVER); } catch (ClassNotFoundException e) { bug = new Bug (); System.err.println(bug.cantFindDriver()); e.printStackTrace(); } try { connect = DriverManager.getConnection(DB_URL); status = connect.createStatement(); clientMenager.setStatus(status); } catch (SQLException e) { bug = new Bug(); System.err.println(bug.disableConnect()); e.printStackTrace(); } run ();
Jak uda się połączyć, wywołujemy metodę run.
Sprawdzam czy instrukcje SQL są poprawne.
// OrderMenager.java run (){ try { clientMenager.checkState(); // Tu jest błąd. } catch (SQLException e) { bug = new Bug (); System.err.println(bug.cantConstructTable()); e.printStackTrace(); return false; } return true; } }
// ClientMenager.java
package View.Controlers; // Moj kontroler Create public class Create { private String query = ""; public Create() { } public void setQuery(String query) { this.query = query; } public String getQuery() { return query; } } private void buildQuery (){ String SQLString = "CREATE TABLE Client IF NOT EXIST " + "( id BIGINT PRIMARY KEY AUTOINCREMENT" + ",name varchar (255), " + "surName varchar (255), " + "login varchar (255), " +")"; // Moje zdanie SQL createSQL.setQuery(SQLString); // Setuje to zdanie do controlera. } public boolean checkState (){ buildQuery(); return status.execute(createSQL.getQuery()); // Wykonaj , jest tu obecnie błąd, że to nie jest zdanie SQL. }
Controler powinen zajmować, wszelką warstwą logiczną i komunikacją z modelem. Na zdrowy rozsądek, to powinen on sprawdzić status. A menagera go pobrać i przekazać do głównego menagera. Z drugiej strony, dojdziemy do 3 poziomu zagłębienia, gdzie status jest przekazywany. Choć według mnie moja wersja jest poprawna. Nie wiem... Sam jestem ciekaw waszego zdania.
Drugie pytanie brzmi dlaczego on twierdzi, że to nie jest zdanie sql.
String SQLString = "CREATE TABLE Client IF NOT EXIST " + "( id BIGINT PRIMARY KEY AUTOINCREMENT" + ",name varchar (255), " + "surName varchar (255), " + "login varchar (255), " +")";
Z góry dziękuje za podpowiedzi. :)