2012-04-10 8 views
1

Ich bin der Gestaltung einer Web-Service-java und Eclipse, welche die Benutzerdaten zurückgibt, die als Kunde in der Datenbank markiert sindRückkehr mehrere Werte in Web-Service

ich erfolgreich in der Lage war Details für einen einzelnen Benutzer zurückzukehren (wie nur einen Eintrag in der dB) mit dem folgenden Code war:

public class GetData { 

public LoginDetails getDetails(){  
    Connection conn; 
    Statement stmt; 
    ResultSet rs; 

    try { 
     LoginDetails lds=new LoginDetails(); 
     Class.forName(driver); 
     conn=DriverManager.getConnection(url,username,password); 
     stmt=conn.createStatement(); 
     String sql="select * from login where usertype='customer'"; 
     rs=stmt.executeQuery(sql); 
     while(rs.next()){ 
      lds.setUsername(rs.getString(1)); 
      lds.setPassword(rs.getString(2)); 
      lds.setUsertype(rs.getString(3)); 
      lds.setActive(rs.getString(4)); 

     } 
     return lds; 
    } 
    catch(ClassNotFoundException c){ 
     c.printStackTrace(); 
    } 
    catch (SQLException e) { 
     e.printStackTrace(); 
    } 

    return null; 
} 
} 

Was soll ich, wenn es tun mehrere Werte in dB Anpassung der Kriterien sind, und ich will sie alle angezeigt werden soll. Bitte um Rat.

+0

Sie können eine [Liste ] (http://docs.oracle.com/javase/6/docs/api/java/util/List.html) – m0skit0

+0

zurückgeben Ich würde nur eine 'List 'oder' LoginDetails [] '. Eine Sache jedoch, ich denke nicht, dass es vom Sicherheitsstandpunkt klug wäre, ein Benutzerpasswort zurückzugeben. – beny23

+0

@ beny23 Richtig, ich habe gerade versucht zu verstehen, wie Dienste auf einem bereits vorhandenen Eintrag im dB funktionieren. Deshalb gab ich das Passwort zurück. Meine schlechte :) –

Antwort

3

Ihre Methodensignatur

-public LoginDetails[] getDetails() ändern und Ihre while-Schleife wie folgt erweitern: Geben Sie eine Sammlung

Collection<LoginDetails> details = new ArrayList<LoginDetails>(); 
    while(rs.next()){ 
     LoginDetails lds=new LoginDetails(); 
     lds.setUsername(rs.getString(1)); 
     lds.setPassword(rs.getString(2)); 
     lds.setUsertype(rs.getString(3)); 
     lds.setActive(rs.getString(4)); 
     details.add(lds); 

    } 
    return details.toArray(new LoginDetails[0]); 
+0

Ich machte die erforderlichen Änderungen und führte das Programm aus, um die folgende Warnung abzurufen: _Die Serviceklasse "com.tutorial.GetData" entspricht nicht einer oder mehreren Anforderungen der JAX-RPC 1.1-Spezifikation und kann nicht ordnungsgemäß bereitgestellt oder funktionieren . Die Methode "getDetails" in der Serviceklasse "com.tutorial.GetData" verwendet den Datentyp "java.util.Collection", der von der JAX-RPC-Spezifikation nicht unterstützt wird. Instanzen des Typs werden möglicherweise nicht korrekt serialisiert oder deserialisiert. Es kann zu Datenverlusten oder zum vollständigen Ausfall des Webdiensts kommen. –

+0

Wenn die Warnung ignoriert wird, wird beim Ausführen des Codes die folgende Ausgabe ausgegeben: ** [[Ljava.lang.Object; @ 19214b1, [Ljava.lang.Object; @ 1afd9cc ] ** –

+0

Muss ich irgendwelche Änderungen in der WSDL-Datei vornehmen ?? –

0

Return suggestiv java.util.List, vorzugsweise Arraylist aus dem Verfahren.

+0

Es ist eine gute Übung, den gebräuchlichsten Typ zu verwenden. Ich würde 'Collection' hier verwenden. Eine 'Liste' ist bestellt, eine' Sammlung' ist nicht. Wenn Sie eine "Liste" verwenden, sollten Sie in der Lage sein zu beschreiben, auf welche Weise es bestellt wird. – Kai