Hallo Leute,
ich bin ganz frisch hier und würde mich wirklich sehr freuen wenn der ein oder andere mir bei meinem Problem behilflich sein könnte.
Ich schreibe derzeit an einem kleinen Pinnwand_Programm. Hierzu habe ich eine locale Datenbankanbindung geschrieben und eine Mapperklasse die nach der Fertigstellung des Programms mit der Datenbank sprechen soll. Mit der Insert Methode hat alles wunderbar funktioniert nur möchte ich nun wissen ob meine MappeKlasse funktioniert. Hierzu habe eine kleine Testklasse(TestCon) angelegt die nun mit new einen neuen User anlegen soll. Sprich über diese Klasse zum Mapper der sich die Datenbankanbindung holt und schließlich den Datensatz in den Datenbank einbindet.
Hier der Code:
Es wäre echt super wenn mir hier jemand weiterhelfen kann.
ich bin ganz frisch hier und würde mich wirklich sehr freuen wenn der ein oder andere mir bei meinem Problem behilflich sein könnte.
Ich schreibe derzeit an einem kleinen Pinnwand_Programm. Hierzu habe ich eine locale Datenbankanbindung geschrieben und eine Mapperklasse die nach der Fertigstellung des Programms mit der Datenbank sprechen soll. Mit der Insert Methode hat alles wunderbar funktioniert nur möchte ich nun wissen ob meine MappeKlasse funktioniert. Hierzu habe eine kleine Testklasse(TestCon) angelegt die nun mit new einen neuen User anlegen soll. Sprich über diese Klasse zum Mapper der sich die Datenbankanbindung holt und schließlich den Datensatz in den Datenbank einbindet.
Hier der Code:
Java:
public class TestCon {
public static void main(String[] args){
User a = new User();
a.setVorname("Jens");
a.setNachname("Merkel");
a.setNickname("merkelj");
UserMapper.userMapper().insert(a);
}
}
Java:
public class UserMapper {
private static UserMapper userMapper = null;
protected UserMapper() {
}
public static UserMapper userMapper() {
if (userMapper == null) {
userMapper = new UserMapper();
}
return userMapper;
}
public User
findByKey(int Uid) {
// DB-Verbindung holen
Connection con = LocalDBConnection.connection();
try {
// Leeres SQL-Statement (JDBC) anlegen
Statement stmt = con.createStatement();
// Statement ausfüllen und als Query an die DB schicken
ResultSet rs = stmt
.executeQuery("SELECT Uid, vorname, nachname, nichkname FROM users "
+ "WHERE Uid=" + Uid + " ORDER BY lastName");
/*
* Da id Primärschlüssel ist, kann max. nur ein Tupel zurückgegeben
* werden. Prüfe, ob ein Ergebnis vorliegt.
*/
if (rs.next()) {
// Ergebnis-Tupel in Objekt umwandeln
User c = new User();
c.setUid(rs.getInt("Uid"));
c.setVorname(rs.getString("vorname"));
c.setNachname(rs.getString("nachname"));
c.setNickname(rs.getString("nickname"));
return c;
}
}
catch (SQLException e) {
e.printStackTrace();
return null;
}
return null;
}
/**
* Auslesen aller Kunden.
*
* @return Ein Vektor mit Customer-Objekten, die sämtliche Kunden
* repräsentieren. Bei evtl. Exceptions wird ein partiell gef�llter
* oder ggf. auch leerer Vetor zurückgeliefert.
*/
public Vector<User> findAll() {
Connection con = LocalDBConnection.connection();
// Ergebnisvektor vorbereiten
Vector<User> result = new Vector<User>();
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT Uid, vorname, nachname, nickname "
+ "FROM users " + "ORDER BY lastName");
// Für jeden Eintrag im Suchergebnis wird nun ein Customer-Objekt
// erstellt.
while (rs.next()) {
User c = new User();
c.setUid(rs.getInt("Uid"));
c.setVorname(rs.getString("vorname"));
c.setNachname(rs.getString("nachname"));
c.setNickname(rs.getString("nickanme"));
// Hinzufügen des neuen Objekts zum Ergebnisvektor
result.addElement(c);
}
}
catch (SQLException e) {
e.printStackTrace();
}
// Ergebnisvektor zurückgeben
return result;
}
/**
* Auslesen aller Kunden-Objekte mit gegebenem Nachnamen
*
* @param name Nachname der Kunden, die ausgegeben werden sollen
* @return Ein Vektor mit Customer-Objekten, die sämtliche Kunden mit dem
* gesuchten Nachnamen repräsentieren. Bei evtl. Exceptions wird ein
* partiell gefüllter oder ggf. auch leerer Vetor zurückgeliefert.
*/
public Vector<User> findByNachname(String name) {
Connection con = LocalDBConnection.connection();
Vector<User> result = new Vector<User>();
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT Uid, vorname, nachname, nickname "
+ "FROM users " + "ORDER BY lastName");
// Für jeden Eintrag im Suchergebnis wird nun ein Customer-Objekt
// erstellt.
while (rs.next()) {
User c = new User();
c.setUid(rs.getInt("Uid"));
c.setVorname(rs.getString("firstName"));
c.setNachname(rs.getString("lastName"));
// Hinzufügen des neuen Objekts zum Ergebnisvektor
result.addElement(c);
}
}
catch (SQLException e) {
e.printStackTrace();
}
// Ergebnisvektor zurückgeben
return result;
}
/**
* Einfügen eines <code>Customer</code>-Objekts in die Datenbank. Dabei wird
* auch der Primärschlüssel des übergebenen Objekts geprüft und ggf.
* berichtigt.
*
* @param c das zu speichernde Objekt
* @return das bereits übergebene Objekt, jedoch mit ggf. korrigierter
* <code>id</code>.
*/
public User insert(User c) {
Connection con = LocalDBConnection.connection();
try {
Statement stmt = con.createStatement();
/*
* Zunächst schauen wir nach, welches der momentan höchste
* Primärschlüsselwert ist.
*/
ResultSet rs = stmt.executeQuery("SELECT MAX(Uid) AS maxid "
+ "FROM users ");
// Wenn wir etwas zurückerhalten, kann dies nur einzeilig sein
if (rs.next()) {
/*
* c erhält den bisher maximalen, nun um 1 inkrementierten
* Primärschlüssel.
*/
c.setUid(rs.getInt("maxid") + 1);
stmt = con.createStatement();
// Jetzt erst erfolgt die tatsächliche Einfügeoperation
stmt.executeUpdate("INSERT INTO users (Uid, vorname, nachname, nickname) "
+ "VALUES (" + c.getUid() + ",'" + c.getVorname() + "','"
+ c.getNachname() + ",'" + c.getNickname() +"')");
}
}
catch (SQLException e) {
e.printStackTrace();
}
/*
* Rückgabe, des evtl. korrigierten Customers.
*
* HINWEIS: Da in Java nur Referenzen auf Objekte und keine physischen
* Objekte übergeben werden, wäre die Anpassung des Customer-Objekts auch
* ohne diese explizite Rückgabe au�erhalb dieser Methode sichtbar. Die
* explizite Rückgabe von c ist eher ein Stilmittel, um zu signalisieren,
* dass sich das Objekt evtl. im Laufe der Methode verändert hat.
*/
return c;
}
/**
* Wiederholtes Schreiben eines Objekts in die Datenbank.
*
* @param c das Objekt, das in die DB geschrieben werden soll
* @return das als Parameter übergebene Objekt
*/
public User update(User c) {
Connection con = LocalDBConnection.connection();
try {
Statement stmt = con.createStatement();
stmt.executeUpdate("UPDATE users " + "SET vorname=\""
+ c.getVorname() + "\", " + "nachname=\"" + c.getNachname() + "\" , " + "nickname=\"" + c.getNickname() + "\" "
+ "WHERE Uid=" + c.getUid());
}
catch (SQLException e) {
e.printStackTrace();
}
// Um Analogie zu insert(Customer c) zu wahren, geben wir c zurück
return c;
}
/**
* Löschen der Daten eines <code>Customer</code>-Objekts aus der Datenbank.
*
* @param c das aus der DB zu löschende "Objekt"
*/
public void delete(User c) {
Connection con = LocalDBConnection.connection();
try {
Statement stmt = con.createStatement();
stmt.executeUpdate("DELETE FROM users " + "WHERE Uid=" + c.getUid());
}
catch (SQLException e) {
e.printStackTrace();
}
}
Java:
public class LocalDBConnection {
private static Connection con = null;
public static Connection connection() {
// Wenn es bisher keine Conncetion zur DB gab, ...
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection(
"jdbc:mysql://localhost/socialmediapinnwand","","");
con.setReadOnly(false);
con.close();
}
catch(Exception e){
System.out.println("*****FEHLER*****->" +e);
}
// Zurückgegeben der Verbindung
return con;
}
Es wäre echt super wenn mir hier jemand weiterhelfen kann.