Archief - Java classe sql query

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Ultimus

Legacy Member
hallo,

ik heb een probleem in mijn code. Ik probeer een simpele query (voor loginmodule) naar mysql databank te sturen maar dit wil niet lukken. Ik krijg steeds volgende fout melding:

SQLException : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'paswoord = informatica' at line 1
(informatica is de waarde uit de variabele password)

Het enige mijn .jsp probeerd uit te voeren is de volgende procedure in een java classe:

Code:
public boolean checkPassword(String username, String password){
		
		try{
			PreparedStatement preparedStatement = null;
			

			Class.forName("org.apache.derby.jdbc.EmbeddedDriver");
			this.conn = DriverManager.getConnection("jdbc:derby://localhost:3306/olen1", "root", "toor");
			
			String query = "select * from gebruikers where GEBRUIKERSNAAM = ?, PASWOORD = ?";
			
			preparedStatement = this.conn.prepareStatement(query);
			preparedStatement.setString(1,username);
			preparedStatement.setString(2,password);
			rs = preparedStatement.executeQuery(query);
				
			this.rs.first();
			
			if(this.rs.getString(5) == username && this.rs.getString(6) == password){
				return true;
			}else{
				return false;
			}
		}
		catch (Exception ex){
			System.out.println("Exception is : " + ex.toString() );
			return false;
		}
	} 
}

Ik ben een beetje ten einde raad, het internet wist me ook niets te vertellen. Is er iemand die deze noob kan verderhelpen? :p

YaMo

Legacy Member
Moet het misschien het volgende zijn?
Code:
String query = "select * from gebruikers where GEBRUIKERSNAAM = ? AND PASWOORD = ?";
(Of OR, ik weet niet precies wat je wil bereiken.)
Ik ben niet zeker, want met MySQL heb ik nog niet gewerkt :p

Ultimus

Legacy Member
YaMo,

Ik heb al zoveel zaken geprobeerd :p en dat was inderdaad nog blijven staan van 1 of andere verwoede poging :-). Ik heb het alleszins aangepast maar het heeft niet mogen baten. Ik krijg nog steeds de zelfde foutmelding.

toch bedankt :-)

Blaaaa

Legacy Member
en zo? (quotes)

Code:
String query = "select * from gebruikers where GEBRUIKERSNAAM = '?' AND PASWOORD = '?'";

Ultimus

Legacy Member
nope :(

het rare is wel dat ik nu de zelfde foutmelding krijg. Ik verwachte enigzins de 'paswoord = 'informatica'' achteraan. Dus nog steeds dezelfde foutmelding.

:(

Blaaaa

Legacy Member
en als je dit doet, werkt de query dan wel? (is niet echt een oplossing maar andere manier):

Code:
String query = "select * from gebruikers where GEBRUIKERSNAAM = '"+username+"' AND PASWOORD = '"+password+"'";

en deze ff weg:

Code:
preparedStatement.setString(1,username);
preparedStatement.setString(2,password);

NeverwinterX

Legacy Member
Kijk ook eens na of je wel de juiste termen uit je tabel gebruikt: staat er niet in je tabel passwoord per ongeluk ofzoiets?

sanzo

Legacy Member
SQL is denk ik niet hoofdlettergevoelig, maar toch even opmerken dat het niet de kolomnamen zijn die in hoofdletters moeten.

YaMo

Legacy Member
sanzo zei:
SQL is denk ik niet hoofdlettergevoelig, maar toch even opmerken dat het niet de kolomnamen zijn die in hoofdletters moeten.

Misschien moet PASWOORD "PASWOORD" worden, want tussen aanhalingstekens tellen hoofdletters wel (denk ik toch). Misschien heeft hij zijn tabellen met een programma gemaakt die de kolomnaam wegens de hoofdletters automatisch tussen "" gezet heeft ofzo...

Of misschien moet je de schemanaam ook meegeven, dus:
from schemanaam.gebruikers
ipv
from gebruikers

sanzo

Legacy Member
Probeer eens user en pass gewoon in je query te typen zonder de parameters van je methode te gebruiken. Het is toch wel raar dat niemand hier een syntaxfout kan zien :p

Zoiets dus:
SELECT * FROM gebruikers WHERE gebruikersnaam='ultimus' AND paswoord='informatica'
zonder setString()

En post anders ook eens je tabeldefinitie ofzo...

Ultimus

Legacy Member
Dit werkt ook niet. Ik krijg steeds dezelfde fout :(

voor de databank zelf: die heb ik met navicat aangemaakt. Heel simpel bestaat de tabel 'gebruikers' uit 6 velden:
id (int)
naam(varchar)
voornaam(varchar)
email(varchar)
gebruikersnaam (varchar)
paswoord (varchar)

het blijft zo vreemd dat het steeds dezelfde foutmelding is die terugkomt. Ik zou verwachten dat ze er een beetje anders uitziet wanneer we die sql wijzigen. Enkel als ik vanuit de login.jsp ander wachtwoord geef zal dit te zijn in de foutmelding.

Ultimus

Legacy Member
net nog iets vreemd ontdekt: nu de code is aangepast naar:
Code:
String query = "SELECT * FROM gebruikers WHERE gebruikersnaam='ultimus' AND paswoord='informatica'";

als ik een ander wachtwoord ingeef veranderd de foutmelding hoewel ik nu geen variabele meer meestuur met de query. bv:
Code:
SQLException : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'paswoord = 123456' at line 1

hoe kan dit?

NeverwinterX

Legacy Member
Enkel "SELECT *" of "SELECT * FROM gebruikers" als query, werkt dat?

edit: dat is wel heel vreemd

NeverwinterX

Legacy Member
dan ligt het toch aan wat anders:
Introduceer een finally block bij je try-catch en doe daarin een conn.close();
Doe ook preparedStatement.close();

Laad ook op een andere manier de driver. Volgens wat ik hier lees, moet je dit doen voor MySql:
Class.forName("com.mysql.jdbc.Driver");
of
Class.forName("com.mysql.jdbc.Driver").newInstance();

Ook de manier waarop je de connection maakt, moet dat niet zoiets zijn:
this.conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/olen1", "root", "toor");

NeverwinterX

Legacy Member
Haal de databank even helemaal offline, zet alles af, reboot en zet alles terug op en probeer eens opnieuw.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan