Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
en table gateway klasse har: * find'ere som returnerer et ResultSet (eller DataRow) * insert/update med samme antal argumenter som der er felter i tabellen * delete med primær nøgle som argument
en row gateway klasse har: * get og set for hvert felt i tabellen * insert/update/delete uden argumenter * static find'ere som returnerer enten en instans eller en ArrayList med instanser (*)
*) Fowler har puttet find'erne over i en seperat klasse, men det synes jeg ikke er nødvendig
I vores BrugerGateway har vi lavet denne. Hvis det overhovedet er et pattern?
public Bruger hentBruger(String brugerID, String passwrd) { try {
Class.forName("oracle.jdbc.driver.OracleDriver"); Connection connection = DriverManager.getConnection( Statement statement = connection.createStatement(); String query = "SELECT * FROM bruger WHERE bruger = 'brugerID' AND password = 'passwrd'"; ResultSet result = statement.executeQuery(query);
Det er selvfølgelig rigtigt nok! Alle vores gateways bliver oprettet i én klasse. Er det forkert? skal Bruger oprettet sin egen gateway? Vi har en kontrolklasse som opretter både Bruger og den klasse, som opretter alle gateways så der er adgang til begge objekter.
Vi skal have en BrugerGateway til vores Bruger klasse. Det eneste vores gateway skal gøre er, at sende et Bruger objekt tilbage.
At det så pludselig er Bruger klassen, som er vores row gateway giver ikke helt mening. Bruger er en normal java klasse uden forbindelse til databasen.
vi fik styr på den sidste fejl. kan du ligge et svare på hvorfor vi får en denne exception?
java.lang.NullPointerException
i denne kode? Du må gerne ligge et svar på samme tid.
public static Bruger hentBruger(String brugerID, String passwrd) { try { String query = "SELECT * FROM bruger WHERE brugerID = '"+ brugerID +"' AND password = '"+ passwrd +"'"; System.out.println(query); ResultSet result = statement.executeQuery(query);
String brugernavn = ""; String password = ""; String afdeling = ""; // test System.out.println(result.getString(1)); //test færdig, testen blev ikke udskrevet!! brugernavn = result.getString(1); password = result.getString(2); afdeling = result.getString(3);
rettelse, men samme fejl og vi har kommenteret hvor vi mener den ligger.
Er det fordi metoden er static? database kaldet ligger i konstruktøren.
public static Bruger hentBruger(String brugerID, String passwrd) { try { // String query = "SELECT * FROM bruger WHERE brugerID = '"+ brugerID +"' AND password = '"+ passwrd +"'"; String query = "SELECT * FROM bruger WHERE brugerID = 'test' AND password = 'test'"; statement = connection.createStatement(); ResultSet result = statement.executeQuery(query); // HERFRA SER DET UD TIL DEN STOPPER
I den anledning har vi et sidste hygge spørgsmål. Er en gateway enten row data eller table data gateway? eller kan det være begge dele?
Du har set vores kode over dig og siger det er et row gateway. Vi sender et ID og får et objekt tilbage. Hvad hvis vi vil have alt i tabellen? Skal vi så bruge table data gateway?
Det er enten row eller table gateway - det kan ikke være begge to samtidigt
Det kan være begge dele. Se Kommentar 25/04-2005 22:48:50
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.