webForumDet fria alternativet

Fel i funktion, retuneras alltid false

Java

4 svar · 270 visningar · startad av Elvis

Medlem sedan maj 200548 inlägg
Frågan#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;

 }
Medlem 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();
Medlem 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?

Medlem 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(*)
Medlem sedan maj 200548 inlägg
#5

Tack för svaren.

261 ms totalt · 3 externa anrop · v20260731065814-full.f363f448
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)