# Dringend Netbeans Derby DB random() function



## sparefroh (25. Jan 2014)

Guten Abend liebe Community,

ich versuche schon seit heute Mittag ein Problem zu lösen auf das selbst mein Professor keine Lösung weiß....


Nämlich ich möchte von einer Tabelle in einer Derby Datenbank in Netbeans einen zufälligen Datensatz herausfiltern.

Nun habe ich in Netbeans ein Worksheet auf meine Connection geöffnet und folgendes eingegeben:


```
select word, language from word where language =  0 order by random();
```

Das funktioniert wunderbar, alle Datensätze wo die Sprache 0 also Deutsch ist werden bunt gemischt zurückgegeben.

Aber wenn ich jetzt in Netbeans in meine WordFacade folgendes mache:


```
String stmt ="select word, language from word "
                + "where language = "+ langNr +" "
                + "order by random()";
        
            if (em.createQuery(stmt).getSingleResult() == null) {
                return "Keine words gefunden";
            }
            return em.createQuery(stmt).getSingleResult().toString();
```

liefert es mir folgenden Fehler wenn ich Debugge und über 


```
em.createQuery(stmt).getSingleResult()
```

mit der Maus fahre


```
em.createQuery(stmt) = >Exception occurred in target VM: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing [select word, language from word where language = 0 order by random()]. 
[32, 32] An identification variable must be provided for a range variable declaration.
[67, 67] The encapsulated expression is missing.<
```

Nun habe ich die versucht die Query mit Alias zu schreiben:


```
select w.word, w.language from WORD w where w.language = 0 order by random()
```

aber auch das brachte keinen Erfolg, da der Fehler immer noch da war....


```
em.createQuery(stmt) = >Exception occurred in target VM: An exception occurred while creating a query in EntityManager: 
Exception Description: Syntax error parsing [select w.word, w.language from WORD w where w.language = 0 order by random()]. 
[75, 75] The encapsulated expression is missing.<
```

Könnt ihr mir erklären woran das liegt?

Wäre dringend da ich die Testverbesserung bis heute um 2 Uhr abgeben müsste ...

Vielen Dank im Voraus

Mit freundlichen Grüßen 

Johannes


----------



## turtle (26. Jan 2014)

Lies bitte mal dies hier.


----------



## sparefroh (26. Jan 2014)

Vielen Dank!


Also ist es nicht möglich da Jpa die funktion nicht unterstützt oder?

Lg

Johannes


----------



## turtle (26. Jan 2014)

Wenn ich den Link richtig lese, steht da doch eindeutig


> it would be possible in HQL


Hast du es probiert und was war das Resultat? 

PS: Du könntest es auch mal mit stinknormalem SQL versuchen.


----------



## sparefroh (26. Jan 2014)

Ja in HQL ist es möglich 

Werde es evtl auch noch mit normalen SQL versuchen.


Vielen Dank für deine Hilfe, ich weiß nicht warum ich den Link nicht alleine gefunden habe, ich hätte gestern so lange gegooglt... aber immer nach der Fehlermeldung... 

Danke nochmal!

LG


----------



## turtle (26. Jan 2014)

Gut, dass ich helfen konnte.

Aber ich gebe zu Protokoll, das dieses spezifisch für Datenbanken und den JPA-Provider ist, sich also ändern könnte.

Ich würde an deiner Stelle noch über eine andere Möglichkeit nachdenken und möchte dir hier noch einen Denkanstoss geben



> einen zufälligen Datensatz herausfiltern


Häufig hat man ja Integer als Schlüssel (primary key) in einer Tabelle. Also könntest du aus der Liste einen zufälligen Eintrag holen, indem du einfach einen zufälligen Integer berechnest. 

Das kannst du kompliziert machen, indem du vorher die Liste der IDs von DB holst und einen Zufallswert aus dieser Menge berechnest. Dann weisst du zumindest, das es einen Datenbanksatz geben muss.  

Oder du berechnest irgendeinen Wert und schaust nach ob dazu ein Datensatz vorhanden ist. Oder, oder.


----------



## sparefroh (26. Jan 2014)

Danke, werde diesen Tipp von dir berücksichtigen, da dass wahrscheinlich die sicherste bzw. beste Variante sein wird.

Dankeschön 

LG


----------

