webForumDet fria alternativet

Fel i funktion, retuneras alltid false

4 svar · 270 visningar · startad av Elvis

ElvisMedlem sedan maj 200548 inlägg
#1

Varför returnes alltid ett 'false' i funktionen nedan? Ska retunera 'true' om det blir mer än en träff i sql-satsen. Finns ingen träff ska 'false' retuneras.

Hur gör jag för att räkna/kontrollera antalet träffar eller lagringar i ett ResultSet?

public boolean FinnsNamn(String strValtNamn)
{
	check=false;

		try
		{

		Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
		Connection con = DriverManager.getConnection("jdbc:odbc:namnlistan");
		Statement stmt = con.createStatement();

		ResultSet rs = stmt.executeQuery("Select * From NAMNLISTA where NAMN='strValtNamn'");

		while(rs.next())
		{
			check=true;
		}

		con.close();

               }

		catch(SQLException ex)
		{
			System.err.println("SQLException: " + ex.getMessage());
		}

		catch(java.lang.ClassNotFoundException e)
		{
			System.err.print("ClassNotFoundException: ");
			System.err.println(e.getMessage());
		}

		return check;

 }
LimeMedlem sedan sep. 2001961 inlägg
#2

Felet ligger i den här raden:

ResultSet rs = stmt.executeQuery("Select * From NAMNLISTA where NAMN='strValtNamn'");

Den söker ALLTID efter strValtNamn i databasen...

Det bör stå såhär:

ResultSet rs = stmt.executeQuery("Select * From NAMNLISTA where NAMN='"+strValtNamn + "'");

Notera att det är NAMN=enkelfnutt dubbelfnutt plus strValtNamn plus dubbelfnutt enkelfnutt.

Ännu bättre är att skriva såhär:

PreparedStatement stmt = con.createPreparedStatement(("Select * From NAMNLISTA where NAMN=?");

stmt.setString(1, strValtNamn);

ResultSet rs = stmt.execute();
ElvisMedlem sedan maj 200548 inlägg
#3

Ok, då förstår jag. Tack för dina tydliga exempel!

När jag kikar i "manualen, så kan jag inte hitta någon metod eller properti för att få antalet poster i en ResultSet.
http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html
Finns det något snabbkommando eller liknande för att få ut antalet poster, då jag tycker det inte känns bra att läsa igenom hela ResulSet för att räkna posterna?

spangoMedlem sedan juni 20008 205 inlägg
#4

Använd COUNT(*)

PreparedStatement stmt = con.createPreparedStatement("Select COUNT(*) as antal_poster From NAMNLISTA where NAMN=?");
stmt.setString(1, strValtNamn);
ResultSet rs = stmt.execute();
rs.first(); // gå till första (och enda) raden
int antal = rs.getInt("antal_poster"); // plocka fram resultatet av count(*)
ElvisMedlem sedan maj 200548 inlägg
#5

Tack för svaren.

129 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)