2 Anfängerfragen zu Queries

Status
Nicht offen für weitere Antworten.

megachucky

Bekanntes Mitglied
Hallo.

Hab noch folgende zwei Fragen:



1. Beim Zugriff auf ResultSet "user_rs1" in der if-Schleife kommt die Meldung:

Error while executing the query java.sql.SQLException: Operation not allowed after ResultSet closed

Wenn ich die if Schleife vor password_rs2 mache, kommt diese Exception nicht. Wieso? Wird die erste rs automatisch geschlossen / gelöscht, wenn eine zweie gemacht wird?




2. Die folgende if Schleife wird nicht ausgeführt, obwohl die Bedingung doch eigentlich passen müsste. Beim test vorher wird ja auch "Kai" auf der Konsole ausgegeben ?!? "logged in" wird aber nicht ausgegeben ?!?

Code:
// test ob gefunden
			System.out.println( rs1_user.getString(1) );
			
			
		
			if (rs1_user.getString(1) == "Kai" )
			{
				isLoggedIn = true;
				System.out.println("Logged in.");
			}



Hier die ganze Klasse:

Code:
package server;

import java.sql.*;

public class Server implements LoginInterface
{
	private Connection connection;
	
	private String user;
	private String password;
	private Statement stmt1, stmt2;
	private ResultSet rs1_user, rs2_password;
	
	private boolean isLoggedIn = false;
	
	public void login(String user, String password)
	{
		connection = new DatabaseConnection().connectToDatabase();
		this.user = user;
		this.password = password;
		
		try
		{
			stmt1 = connection.createStatement();
			String userQuery = "SELECT username FROM user WHERE username = 'Kai'";
			rs1_user = stmt1.executeQuery(userQuery);
			rs1_user.next();
			
			// test ob gefunden
			System.out.println( rs1_user.getString(1) );
			
			
		
			if (rs1_user.getString(1) == "Kai" )
			{
				isLoggedIn = true;
				System.out.println("Logged in.");
			}
			
			
			stmt2 = connection.createStatement();
			String passwordQuery = "SELECT password FROM user WHERE password = '1111'";
			rs2_password = stmt1.executeQuery(passwordQuery);
			rs2_password.next();
			
			
			System.out.println( rs2_password.getString(1) );
		
		
			
			
		}
			
		catch (SQLException e)
		{
			System.err.println("Error while executing the query " + e);
		}
		catch (Exception e)
		{
			System.err.println("Username and / or password wrong");
		}
		
		
		
	}
	
	public void logout()
	{
		isLoggedIn = false;
		System.out.println("Logged out.");
	}
	
	public boolean isLoggedIn()
	{
		return isLoggedIn;
	}
	
	public void setLoggedIn(boolean loggedIn)
	{
		this.isLoggedIn = loggedIn;
	}
	
	
	
	
	
	
	
}
 

bronks

Top Contributor
Code:
if (rs1_user.getString(1) == "Kai" )
Strings vergleicht man mit "equals"

In Deinem Programm können viel mehr Exceptions geschmissen werden, als sich Deine Fehlerbehandlung vorstellen kann. Lass Dir mit "e.printStackTrace()" den Trace ausgeben. In diesem steht der Fehler vollständig und verständlich incl. Position drin.
 

megachucky

Bekanntes Mitglied
Ok, mit equals geht es. Das benutzt man immer, wenn man Objekte vergleichen will, richtig?

Das zweite Problem bleibt aber noch, der Stacktrace sagt mir auch nicht mehr (zumindest kann ich nicht mehr rauslesen):

Error while executing the query
java.sql.SQLException: Operation not allowed after ResultSet closed
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.ResultSet.checkClosed(ResultSet.java:644)
at com.mysql.jdbc.ResultSet.checkRowPos(ResultSet.java:682)
at com.mysql.jdbc.ResultSet.getStringInternal(ResultSet.java:5487)
at com.mysql.jdbc.ResultSet.getString(ResultSet.java:5431)
at server.Server.login(Server.java:45)
at testCode.TestServer.main(TestServer.java:10)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben