Vad beror detta problem på att den översta koden skriver ut texten "Ingen träff", trots att det är en träff och att rs.getRow() bevisligen har värdet ett, vilket kod nummer två visar? Kan ju inte direkt se att något är fel i if-satsen? Eller har jag stirrat mig blind på något simpelt fel?
Det "rekommenderade" sättet att göra detta på är att inte kolla på radnummret utan använda sig av den boolean som kommer av rs.first(), rs.next() eller rs.last().
Om du t.ex. ställer frågan SELECT DISTINCT * FROM losenord WHERE namn='emil' AND losenord='aaa'" så bör du få ut ett och endast ett resultat om det finns någon som har namnet emil och lösenordet aaa.
Sedan skulle jag göra databasfrågan på följande sätt.
PreparedStatement pstmt = con.prepareStatement("SELECT DISTINCT * FROM losenord WHERE namn=? AND losenord=?");
pstmt.setString(1, "emil");
pstmt.setString(2, "aaa");
rs = pstm.execute();
Detta gör att applikationen blir mer oberoende av den databas du använder dig av eftersom det i specifikationen av JDBC-drivern står hur man skall stödja prepared statement. Man lämnar alltså över till drivrutinen att hålla reda på hur framför allt strängar hanteras.
En annan bra sak är att de flesta webservrar och applikationsservrar idag implementerar sina databaspooler på ett sådant sätt att de även poolar prepared statements och detta gör det hela väldigt mycket mer effektivt.
Tack för tipset och hjäpen.
Den där senaste konstruktionen du visade såg mer strukturerad och genomtänkt ut, än den jag försökte mig på, så den ska jag försöka lägga på minnet. :)
266 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849