[MYSQL] Location auswerten

Dieses Thema im Forum "Programmierung" wurde erstellt von Nexus15, 4. Januar 2013.

  1. Nexus15
    Offline

    Nexus15

    Registriert seit:
    30. September 2012
    Beiträge:
    91
    Hallo,
    Ich möchte eine Location die in einem varchar gespeichert ist auslesen und den Spieler dorthin Porten.
    Die Location liegt in folgenden Format vor:

    Location{world=CraftWorld{name=World},x=-7.811218033182131,y=71.5,z=230.5840684570877,pitch=17.741913,yaw=267.897}

    Bevor jemand schreibt ich solle es doch selbst erstmal ausprobieren.

    String servern = Bukkit.getServer().getServerName();
    Statement stmt = null;
    ResultSet rs = null;
    try {
    Connection conn = DriverManager.getConnection(url, user, pass);
    stmt = conn.createStatement();
    rs = stmt.executeQuery("SELECT loc FROM lobby WHERE name='"+servern+"'");
    while(rs.next()) {
    int endRS = rs.getInt(1); // hmm... getLocation?
    p.teleport(endRS);
    }
    rs.close();
    stmt.close();
    conn.close();
    }

    Vielen Dank für hilfreiche Beiträge ;)
     
    #1
  2. Baba43
    Offline

    Baba43 Ehem. Teammitglied

    Registriert seit:
    5. November 2012
    Beiträge:
    590
    Was du da auslesen willst ist doch auch kein Int.. ich würde dir ein eigenes Speicherformat empfehlen, je nachdem, wie genau die Location sein soll. Dann liest du die Location als String aus und zerlegst ihn danach in gültige Location.
     
    #2
  3. Nexus15
    Offline

    Nexus15

    Registriert seit:
    30. September 2012
    Beiträge:
    91
    hmm... ok und wie funktioniert das jetzt konkret ?
    Bin noch relativ neu auf der Insel Java.
     
    #3
  4. Hecke29
    Offline

    Hecke29

    Gibt doch bestimmt irgendwas wie split(",") in Java oder?
    Oder explode(",") oder sowas.
     
    #4
  5. Nexus15
    Offline

    Nexus15

    Registriert seit:
    30. September 2012
    Beiträge:
    91
    gut möglich, jedoch bringt mich das nicht wirklich weiter ;)
     
    #5
  6. Alternativ kann man eine Location auch jeweils in ihre Felder einteilen und dann die Location später zurückhohlen:
    MySQL Tabelle:
    ... ...
    Welt => World
    x => -7....
    y => 71...
    z => ...
    ....
    Die kannst du dann einfach auslesen.
     
    #6
  7. TimBone
    Offline

    TimBone

    Ich würde die jeweilige Achse speichern. Also : int x = p.getxCoordinates();
     
    #7
  8. Nexus15
    Offline

    Nexus15

    Registriert seit:
    30. September 2012
    Beiträge:
    91
    ok Danke, ich probiere es mal. ;)
     
    #8
  9. Nexus15
    Offline

    Nexus15

    Registriert seit:
    30. September 2012
    Beiträge:
    91
    gut, das einlesen funktioniert schon mal. Mit dem auslesen habe ich leider Probleme.

    try {
    Connection conn = DriverManager.getConnection(url, user, pass);
    stmt = conn.createStatement();
    rss = stmt.executeQuery("SELECT deads FROM points WHERE name='"+pn+"';");
    rs = stmt.executeQuery("SELECT kills FROM points WHERE name='"+pn+"';");
    while(rs.next()) {
    int deads = rss.getInt(1);
    int kills = rs.getInt(1);
    double KD = kills/deads;
    p.sendMessage(ChatColor.BLUE + "========" + ChatColor.RED + "TheGhost-Network" + ChatColor.BLUE + "========");
    p.sendMessage(ChatColor.GOLD + "Kills: " + ChatColor.RED + kills);
    p.sendMessage(" ");
    p.sendMessage(ChatColor.GOLD + "Tode: " + ChatColor.RED + deads);
    p.sendMessage(" ");
    p.sendMessage(ChatColor.GOLD + "KD: " + ChatColor.RED + KD);
    p.sendMessage(ChatColor.BLUE + "========" + ChatColor.RED + "TheGhost-Network" + ChatColor.BLUE + "========");

    }
    rs.close();
    rss.close();
    stmt.close();
    conn.close();

    Funktioniert leider nicht. Dies bezieht sich zwar auf einen anderen Fall, jedoch muss ich trotzdem 2 Sachen auslesen.
    Hätte dafür evtl. jemand eine Lösung ?

    Server.log (Ausschnitt)
    [SEVERE] null
    java.sql.SQLException: Operation not allowed after ResultSet closed [...]
    at com.hiancou.ghost.commands.Stats.onCommand(Stats.java:46) [...]

    Zeile 46
    int deads = rss.getInt(1);
     
    #9
  10. Änder erstmal den Query! 2 Queries für eine Tabelle sind ünnötig.

    Code (Text):
    1. SELECT kills, deads FROM points WHERE name='"+pn+"';"
     
    #10