Java SQL Datenbankabfrage

miroo

Grünschnabel
Hallo.

Ich bräuchte dringend Hilfe bei meiner Datenbankabfrage. Ich befürchte, dass das ganz einfach ist, aber ich komme irgendwie nicht weiter :-/

Ich habe eine Tabelle "userinfo" mit 4 Spalten (Benutzername, ständigeURI, temporäreURI, status).

Die Tabelle bzw. die DB in der sich diese befindet soll eine Art Location Server sein. D.h. wenn sich ein User Registriert möchte ich wie folgt vorgehen:

Prüfe ob Benutzername bereits eingetragen
--- wenn ja, Prüfe ob Benutzername und ständige URI mit der übermittelten übereinstimmen (bei der Registrierung werden Benutzername, st. und temp. URI übergeben)
-------wenn ja, trage die temporäre URI ein
-------wenn nein, gib eine Fehlermeldung aus
---wenn nein, trage den User neu in die Tabelle ein

Kann mir jemand helfen? Was vielleicht noch wichtig ist, ich arbeite mit Java NIO und JDBC.
 
Hi,
woran hängst denn jetzt bei dir? Du weisst was zu tun ist und womit. Allgemein kann ich dir noch die Nutzung von Prepared Statements und evtl. eines Daten Caches empfehlen damit du nicht bei jedem Login eine teure Datenbankabfrage hast.

VG,
ck.
 
Wenn ich den Eintrag so lesen, scheinst Du zwar zu wissen, wie's funktionieren soll, jedoch nicht, wie Du's umsetzt.

Ich empfehle Dir, Deine Doings in Methodenform "zu gießen", also ein Benutzerinterface zu definieren:
Code:
public interface DB {
public boolean containsUser(String benutzername, URI staendigeURI, URI temporaereURI);
public void createUser(String benutzername, URI staendigeURI, URI temporaereURI);
// u.s.w.
}

Nun brauchst Du noch die Logik-Implementierungen, d.h. z.B. die main-Methode, die abfragt, ob der User in der DB vorhanden ist und wenn nicht, ihn anlegen läßt. Das DB-Interface dazu steht oben.

Dieses DB-Interface implementiert Du (z.B. DBImpl-Klasse) und ergänzt das Ganze noch mit einer Methode, die Dir eine DB-Connection als Objekt liefert. Kochchefs Info, PreparedStatements zu verwenden hilft Dir performancetechnisch, wenn Du die gleichen Dinge mehrfach abfagst. PreparedStatements sind auch kein Hexenwerk, die kannst Du ganz leicht verwenden, indem Du Deinen SQL-Statements "?" an den Parametern verpaßt (siehe auch http://java.sun.com/javase/6/docs/api/java/sql/PreparedStatement.html) und dann setzt Du diese vor dem Execute. Nach der/den SQL-Abfrage(n) Deines "DB-Services" machst Du noch Deine DB-Connection zu. Das Ganze könnte dann so aussehen:
Code:
public boolean containsUser(String benutzername, URI staendigeURI, URI temporaereURI) {
Connection con = getConnection();   
try {
PreparedStatement ps = con.getPreparedStatement(USER_ABFRAGE); // aus Konstante
ps.setString("benutzername", benutzername);
// u.s.w.
return ps.executeQuery().next();
} finally {
con.close();  
}
}
 
Zurück