Array in java vullen via JDBC

Status
Niet open voor verdere reacties.

Virusbeatbox

Gebruiker
Lid geworden
18 dec 2007
Berichten
201
Beste,

ik ben momenteel bezig aan een nieuw projectje en zou een array die in m'n java staat vullen door 10 elementen uit mijn MS access database te halen.

Ik heb reeds het internet afgezocht en vind niets in deze aard (of kijk er gewoon over). Hier op het forum had ik deze gevonden :
http://www.helpmij.nl/forum/showthread.php?t=392650
maar het probleem wordt niet opgelost. Misschien dat jullie raad weten? Hartelijk dank
 
Laatst bewerkt:
Beste Virus,

Als je een resultset uit een statement.executeQuery krijgt kan je hier doorheen lopen en de waardes eruit opvragen.

Ik zou hier is naar kijken: http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html
(tip: methodes getString en getArray )

Ik zat te denken aan zoiets:

Code:
private String[] array = new String[10];

public void methodeNaam(String query) {
        ResultSet rs;
	try {
	       int tmp = 0;
               Statement stmt = connection.createStatement();
		rs = stmt.executeQuery(query);
		while (rs.next()) {
		    tmp++;
                    array[tmp] = rs.getString(1));
                }
		}catch (SQLException s) {
			System.out.println("Could not execute the Query");
		}
	}

Ik hoop dat je hier wat aan hebt

M.v.g.
NewbProg
 
Wel momenteel heb ik dit :

[XML]Connection con = null;
Statement stmt = null;
ResultSet rs = null;

try{
con = DriverManager.getConnection("jdbc:odbc:databank");
stmt = con.createStatement();
rs = stmt.executeQuery("SELECT TOP 10 Vraag.[ID], Vraag.Soort, Vraag.Vraagstelling, Vraag.Instructie FROM Vraag ORDER BY Rnd(Vraag.[ID]) DESC");

ResultSetMetaData metaData = rs.getMetaData();
int numberOfColumns = metaData.getColumnCount();

while(rs.next())
{
for (int i = 1; i <= numberOfColumns; i++)
{
System.out.print(rs.getObject(i));
System.out.println();
}
System.out.println();
}
}catch(SQLException sqle){
sqle.printStackTrace();
}finally{
try{
rs.close();
stmt.close();
con.close();
}catch(Exception e)
{
e.printStackTrace();
}
}[/XML]

hierdoor kan ik 10 random vragen (die jammer genoeg nu nog telkens hetzelfde blijven als ik dit run) en kan ik deze dan afdrukken op het scherm...
 
Wat ik ook nog wou vragen, ik weet dat er in Access een functie bestaat Rnd() die random gegevens selecteert maar ik ben ook bewust van dat, als je dit toepast en de database sluit, heropent en opnieuw random laat lopen, dat je telkens dezelfde gegevens krijgt. Om dit te voorkomen is er in Access een functie Randomize maar dit is enkel voor in VBA, bestaat dit eventueel ook dat ik in mn sql statement in java kan stoppen? momenteel heb ik dit :

[XML]rs = stmt.executeQuery("SELECT TOP 10 Soort, ID, ... FROM Vraag ORDER BY Rnd(IsNull([ID])*0+1) DESC");
[/XML]

Zoals je ziet wordt hier de RND() functie gebruikt en krijg ik dus telkens dezelfde vragen, hopelijk heeft iemand raad?
 
Als je zorgt dat je ID netjes oploopt voor je vragen kan je dit veld gebruiken om random een vraag op te halen.

je moet dan het volgende doen
- bepaal hoeveel vragen er zijn "select count(*) as rowcount from ..."
- in java bereken je een random getal (Random) met als max rowcount
- je kan je random vraag ophalen met "select ... where ID = " + randomgetal

Als je ID niet netjes oploopt kan het ook anders, maar dan met movable cursors. (google : TYPE_SCROLL_SENSITIVE).
Ik weet niet of access dit ondersteunt.. (maar er is ook een gratis Oracle db...:) )

Je kan dan 1 sql voor alles gebruiken
- sql -> "select ... from vragen"
- rs.last() & rs.getRow() -> heb je hoeveel rijen er zijn.
- rs.absolute(r) & rs.getRow() -> ga naar rij r

succes
 
Beste, ik heb eventjes jouw tip toegepast en het is wel leuk, het enigste is dat, als ik een random number neem en deze gebruik om aantal rijen uit de database te halen dan kan dit soms verschillen EN neemt hij enkel de vragen met ID die overeenstemmen met het random gegenereerde getal.

Ik zou telkens 10 vragen moeten krijgen, deze moeten random gekozen worden onafhankelijk van hun ID en dergelijke.
 
Als je 100 vragen hebt zal je ID van 1 > 100 lopen.. (of van 0 tot 99...). Als je nu random getal neemt tussen 1 en 100 (beide inclusief) kijg je random 1 vraag terug.. (niet select top10 ... doen want dan krijg je wel 10 vragen maar niet random)

Als je 10 vragen will hebben, zal een for-loop uitkomts brengen..
for (int i = 0, i < 10; i++) {
vragen = getRandomVraag();
}

ps. als je netjes bent controleer je of je de vraag al getrokken hebt.. anders kan je meerdere keren dezelfde vraag krijgen...

(ps2 : in Oracle is het wat makelijker je kan dan nml gewoon doen "select... where RowNum = 10, geeft je netje 10 rij terug..)
 
Ik wil eventjes een foutje rechtzetten,

de methode van Skinflowers werkt inderdaad. Ik had mij enkel vergist en een fout gemaakt in mn database. Ik ga nu die methode proberen te combineren met de laatste die ik gekregen heb. Dan kan ik er voor zorgen dat ik niet telkens dezelfde soort vraag na elkaar krijg.

greetz
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan