public Location ?

Dieses Thema im Forum "Programmierung" wurde erstellt von Nexus15, 13. März 2013.

  1. Nexus15
    Offline

    Nexus15

    Registriert seit:
    30. September 2012
    Beiträge:
    91
    Ich habe wiedermal ein kleines Problem ...
    Code (Text):
    1. public  Location getVectorLeft(String pn, World w) throws SQLException {
    2.         Statement stmt = null;
    3.         ResultSet rs = null;
    4.         Connection con = DriverManager.getConnection(url, user, pass);
    5.         stmt = con.createStatement();
    6.         rs = stmt.executeQuery("SELECT x, y, z FROM users WHERE name='"+pn+"';");
    7.         while(rs.next()) {
    8.             double x = rs.getDouble(1);
    9.             double y = rs.getDouble(2);
    10.             double z = rs.getDouble(3);
    11.             Location loc = new Location(w,x,y,z); // Diese Location möchte ich zurückgeben...
    12.            
    13.         }
    14.         return loc; // Variable loc ist nicht Verfügbar, da sie nur "local" ist, dass möchte ich ändern !
    15.        
    16.     }
     
    #1
  2. Cabraca
    Online

    Cabraca

    Da müsste deine IDE schon alarm schlagen.
    Parameter w wird nirgendwo gesetzt und wenn das Ergebnis der SQL abfrage leer ist wird deine location gar nicht erst erstellt und die Funktion gibt null zurück.
     
    #2
  3. Hecke29
    Online

    Hecke29

    Issich Übergabeparamter.
     
    #3
  4. Cabraca
    Online

    Cabraca

    Oh stimmt hab ich hier auf.m Handy nich gesehen
     
    #4
  5. Nexus15
    Offline

    Nexus15

    Registriert seit:
    30. September 2012
    Beiträge:
    91
    Das hilft mir nicht weiter :)
     
    #5
  6. Hecke29
    Online

    Hecke29

    Das SQL-Statement gibt nach der CodeLogik ja eh immer nur ein Ergebnis zurück oder?
     
    #6
  7. Crafter6432
    Offline

    Crafter6432

    Registriert seit:
    22. Dezember 2011
    Beiträge:
    686
    Sind in der DB überhaupt doubels oder nur Ints?
     
    #7
  8. MrFlieder
    Offline

    MrFlieder

    Registriert seit:
    30. Dezember 2011
    Beiträge:
    333
    Ort:
    Österreich
    Minecraft:
    MrFlieder
    Um zum eigentlichen Problem zurückzukehren:
    Du legst Location loc in der while-Schleife an, deshalb kannst du darauf nicht außerhalb dieser Schleife zugreifen.

    Du musst zuerst die Location loc deklarieren und erst dann in der while-Schleife initialisieren:
    Code (Text):
    1.  
    2. Location loc = null;
    3. while(true)
    4. {
    5. loc = new Location(world, x, y, z);
    6. }
    7. return loc;
    8.  
     
    #8
  9. Hecke29
    Online

    Hecke29

    Ich hab keine Ahnung von Java, aber wenn eh nur ein Ergebnis kommt, geht dann nicht auch das hier:
    Code (Text):
    1.  
    2. [..]
    3.         rs = stmt.executeQuery("SELECT x, y, z FROM users WHERE name='"+pn+"' LIMIT 1;");
    4.         rs.next()
    5.         double x = rs.getDouble(1);
    6.         double y = rs.getDouble(2);
    7.         double z = rs.getDouble(3);
    8.         return new Location(w,x,y,z);
    9. [..]
    10.  
     
    #9
  10. Crafter6432
    Offline

    Crafter6432

    Registriert seit:
    22. Dezember 2011
    Beiträge:
    686

    Ja, allerdings sollte man vorher mit if(rs.net()) prüfen ob ein Wert zurück geben wurde.
     
    #10