Joey Posted June 1, 2014 Share Posted June 1, 2014 (edited) Naja, leider habe ich die Überschrift unpassend gewählt. Habe nämlich eins im Netzs gefunden und habe aber ein Problem. Ich habe Verbindung aufgebaut und alles hat soweit geklappt. public static void Create(String name){ mysql.Update("INSERT INTO test_db_test(name,test1,test2,test3,test4) VALUES ("+name+",0, 0,0,0)"); } Nun zu meiner Frage. Wie kann ich machen, dass z.B. bei einem OnPlayerJoinEvent die public static void Create ausgeführt wird, aber nur dann wenn der name noch nicht in der Tabelle test_db_test vorhanden ist ? PS: wäre es evtl möglich den Beitrag umzubennen ?? Ich weiß nicht ob ich das kann bzw. wie das geht ! Mfg, Joey Edited June 1, 2014 by Joey Link to comment Share on other sites More sharing options...
Baustein Posted June 1, 2014 Share Posted June 1, 2014 Wie soll der Titel denn heißen? Und zu deiner Frage programmier ich dir eben was. Liebe Grüße, Baustein EDIT: Also erst einmal empfehle ich dir, diese formschöne SQL-Klasse reinzukopieren, die du auch immer nutzen kannst. Wenn sie dir gefällt, dann bedank dich doch ne Runde bei Arcalio, dem hab ich sie nämlich zu verdanken. Da stehen so lustige Methoden wie connect() und close() drin. Hier ist ihr Code: public class SQL { public static Connection con; public static void connect(String host, String db, String user, String pass, String port) { try { con = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + db,user,pass); System.out.println("[WAVEDEFENSE] Verbindung zu MySQL-DB hergestellt."); } catch (SQLException e) { e.printStackTrace(); } } public static void close(){ if (con!=null){ try{ con.close(); System.out.println("[WAVEDEFENSE] Verbindung zu MySQL-DB geschlossen."); }catch (SQLException e){ e.printStackTrace(); } } } public static void update(String qry){ try{ Statement stmt = con.createStatement(); stmt.executeUpdate(qry); }catch (SQLException e){ e.printStackTrace(); } } public static ResultSet query(String qry){ ResultSet rs = null; try{ Statement stmt = con.createStatement(); rs = stmt.executeQuery(qry); }catch (SQLException e){ e.printStackTrace(); } return rs; } } Und dann kannst du etwas Solches machen: @EventHandler public void onJoin(PlayerJoinEvent e) throws SQLException { String name = null; ResultSet rs = SQL.query("SELECT * FROM test_db_test WHERE name='" + name + "';"); if (!rs.next()) { Create(name); } } Ein ResultSet ist das Ergebnis einer Abfrage, in diesem Beispiel ist das das Ergebnis der Abfrage, die dir die Einträge gibt, wo `name`='name' ist. Den String musst du natürlich noch ersetzen, keine Ahnung was du da drin haben willst aber null ist es bestimmt nicht rs.next() gibt jetzt einen Boolean zurück. Wenn ein Eintrag vorhanden ist, so ist der boolean true, und wenn keine da ist false. Das Ausrufezeichen invertiert diese Abfrage. Der Teil in den geschweiften Klammern wird also nur ausgeführt, wenn rs.next() false zurückgibt, und somit kein Wert vorhanden ist. Zuletzt gibt es nur noch eines zu sagen, nämlich dass Methodennamen für gewöhnlich mit einem Kleinbuchstaben beginnen ;D Ich hoffe, ich konnte dir helfen, wenn ja, dann lass mir doch bitte nen Like da. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 1, 2014 Author Share Posted June 1, 2014 Titel sollte sowas wie Brauche Hilfe mit MYsql oder so etwas ;D && danke Mfg, Joey Link to comment Share on other sites More sharing options...
Baustein Posted June 1, 2014 Share Posted June 1, 2014 Hab den Titel beendet, und dir die Lösung geliefert Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 1, 2014 Author Share Posted June 1, 2014 Erstmal ein riesen großen dankeschön an dich und @Arcalio , jedoch wird mir nun das hier rot angestrichen : mysql.connect(); //die class heiste mysql nicht sql habe das aber schon geändert ! Mfg, Joey Link to comment Share on other sites More sharing options...
Baustein Posted June 1, 2014 Share Posted June 1, 2014 Klar, da musst du die Strings Host, Port, User, Password und Database als Parameter übergeben Die Klasse kann deine Zugangsdaten ja nicht riechen Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 1, 2014 Author Share Posted June 1, 2014 (edited) Habe ich alles gemacht und ich bekomme auch die meldung, dass die Mysql verbindung hergestellt wurde. doch sobal ich Connecte bekomme ich folgenden Error: [19:12:16] [Server thread/WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column '_Jo3y_' in 'field list' Mfg, Joey Edited June 1, 2014 by Joey Link to comment Share on other sites More sharing options...
Baustein Posted June 1, 2014 Share Posted June 1, 2014 Ja, weil du den String name noch nichts zuteilst. In deinem Beispiel hattest du mysql.Update("INSERT INTO test_db_test(name,test1,test2,test3,test4) VALUES ("+name+",0, 0,0,0)"); und ich habe name einfach als Variable des Typs String genutzt. Natürlich muss in name auch noch was drinstehen, null ist kein String. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 1, 2014 Author Share Posted June 1, 2014 Habe ich doch. String name = e.getPlayer().getName(); Link to comment Share on other sites More sharing options...
Arcalio Posted June 1, 2014 Share Posted June 1, 2014 Um nach der Exception zu urteilen, versuchst du, auf die Spalte _jo3y_ zuzugreifen. Ich gehe mal davon aus, dass das aber nur ein Eintrag ist. Überprüfe da nochmal deine SQL-Abfrage und schreibe sie sonst mal hier... Link to comment Share on other sites More sharing options...
Joey Posted June 1, 2014 Author Share Posted June 1, 2014 Meine sql abfrage ist : ResultSet rs = mysql.query("SELECT * FROM ec_jump_users WHERE name='" + name + "';"); Mfg, Joey Link to comment Share on other sites More sharing options...
Baustein Posted June 1, 2014 Share Posted June 1, 2014 Bitte schick uns mal deinen gesamten bisherigen Code. Laut dem Error gibt es die Spalte halt nicht. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 1, 2014 Author Share Posted June 1, 2014 Ok also dass ist halt die Mehtode create : public void Create(String name){ mysql.update("INSERT INTO ec_jump_users(name,jpoints,ljump,mjumps,sjumps) VALUES ("+name+",0,0,0,0)"); } und dass die abfrage : @EventHandler public void onJoin(PlayerJoinEvent e) throws SQLException { String name = e.getPlayer().getName(); ResultSet rs = mysql.query("SELECT * FROM ec_jump_users WHERE name='" + name + "';"); if (!rs.next()) { Create(name); } } Mfg, Joey Link to comment Share on other sites More sharing options...
Baustein Posted June 1, 2014 Share Posted June 1, 2014 public void Create(String name){ mysql.update("INSERT INTO ec_jump_users(name,jpoints,ljump,mjumps,sjumps) VALUES (name,0,0,0,0)"); } Du hast als Namen immer +name+ angegeben, klar dass der joey nicht findet Um sowas herauszufinden ist es auch oft gut, in PHPMyAdmin die Datenbank zu beobachten. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 1, 2014 Author Share Posted June 1, 2014 Danke, jetzt gibt es keine Error Meldung und es erstellt sich auch die Spalte in der Datenbank. jedoch ist der Wert bei name leer :/ Ps: Ich weiß das ich nerve, aber irgendwie möchte ich das es endlich klappt sry :/ Mfg, Joey Link to comment Share on other sites More sharing options...
Baustein Posted June 1, 2014 Share Posted June 1, 2014 Ich sehe keine große Möglichkeit, was noch falsch sein könnte, also schick uns bitte nochmal den ganzen neuen Code. Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 1, 2014 Author Share Posted June 1, 2014 Ich habe mal die mehtoe Create komplett rausgenommen und habe es direkt eingetragen in das Event : @EventHandler public void onJoin(PlayerJoinEvent e) throws SQLException { String name = e.getPlayer().getName(); ResultSet rs = mysql.query("SELECT * FROM ec_jump_users WHERE name='"+ name + "';"); if (!rs.next()) { mysql.update("INSERT INTO ec_jump_users(name,jpoints,ljump,mjumps,sjumps) VALUES (name,0,0,0,0)"); } } jedoch hatte ich den beschrieben code davor und danach. Mfg, Joey Link to comment Share on other sites More sharing options...
Beefsteakwerfer Posted June 1, 2014 Share Posted June 1, 2014 (edited) Lass dir mal den gesamten Query ausgeben, bevor er ausgeführt wird. Damit man sieht was er statt der Variable setzt und ob ein Syntaxfehler vorliegt. Edited June 1, 2014 by Beefsteakwerfer Link to comment Share on other sites More sharing options...
Joey Posted June 2, 2014 Author Share Posted June 2, 2014 Ich habe mir den String name mal ausgeben lassen und habe es mit mehreren Acc getestet, es ist immer der richtige Name, er wird nur nicht in der Datenbank gesetzt. Alle anderen Werte werden ja gesetzt nur nicht der Name :/ Mfg, Joey Link to comment Share on other sites More sharing options...
Gelöscht_kiwi Posted June 2, 2014 Share Posted June 2, 2014 Heyho, ganz einfach. Ich beziehe mich mal auf den ersten Post: public static void Create(String name){ mysql.Update("INSERT INTO test_db_test(name,test1,test2,test3,test4) VALUES ("+name+",0, 0,0,0)"); } muss natürlich public static void Create(String name){ mysql.Update("INSERT INTO test_db_test(name,test1,test2,test3,test4) VALUES ('"+name+"',0, 0,0,0)"); } lauten. LG, Manu Link to comment Share on other sites More sharing options...
Baustein Posted June 2, 2014 Share Posted June 2, 2014 Stimmt, Werte müssen in Apostrophs angegeben werden. Ganz dummer Fehler meinerseits Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 2, 2014 Author Share Posted June 2, 2014 Ok es funktioniert Vielen Dank Aber das stellt mich vor mein nächstes Problem. Wie gesagt ich habe vorher nochnie mit Mysql gearbeitet. Wie kann ich in der Tabelle mit einem bestimmten Namen Daten auslesen und bearbeiten ?? Mfg, Joey Link to comment Share on other sites More sharing options...
Baustein Posted June 2, 2014 Share Posted June 2, 2014 Ein Beispiel bitte. Was willst du auslesen, was soll gemacht werden? Liebe Grüße, Baustein Link to comment Share on other sites More sharing options...
Joey Posted June 2, 2014 Author Share Posted June 2, 2014 Wenn ein User z.B diese Event auslöst if(plugin.test.contains(p.getName())){ if(b.getType() == Material.ENDER_STONE) { } soll z.B in der Tabelle mit seinem Namen. der Wert von Test1 + 1 gerechnet werden. Mein Problem ist nun ich kann ja den Wert mit ResultSet test1 = SQL.query("SELECT * FROM test_db_test WHERE Test1='" + Test1 + "';"); auslesen, aber wie kann ich es machen, dass der Wert von dem Spieler geändert wird der in dem String name ist und vorallem wie kann ich den Wert am besten plus 1 setzen und wieder abspeichern ?? Mfg, Joey Link to comment Share on other sites More sharing options...
Gelöscht_kiwi Posted June 3, 2014 Share Posted June 3, 2014 (edited) Heyho, gibt 2 Möglichkeiten (Achtung, Pseudocode): 1) Die Zeile erstmal auslesen, den Wert inkrementieren und zurückschreiben SQL.query("SELECT * FROM test_db_test WHERE name='" + name + "';"); // <-- hier Test1 inkrementieren SQL.query("UPDATE test_db_test SET Test1=" + Test1 + " WHERE name='" + name + "'"); 2) Oder einfach die Test1-Zelle mit einem Query inkrementieren SQL.query("UPDATE test_db_test SET Test1=Test1+1 WHERE name='" + name + "'"); Edited June 3, 2014 by kiwi Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now