Sprawdzenie, czy w bazie danych są podane wartości i zwrócenie true/false.

0

Tabela ma dwie kolumny - imię i nazwisko. Wpisuję w konsolę polecenie sprawdz(jakiesImie, jakiesNazwisko). Polecenie to jest przyjmowane jako parametr funkcji, która sobie odpowiednio tnie ten napis tak, aby jakiesImie i jakiesNazwisko były oddzielnie zapisane w tablicy stringów. Problem polega na napisaniu zapytania, które sprawdzi czy jest rekord z takimi wartościami i zwróci false/true. Jak powinno ono wyglądać? Kombinowałem z SELECT, ale bez skutku.

0

To pokaż jak kombinowałeś.

0

Np. w ten sposób:

PreparedStatement statement = con.getConnection().prepareStatement("SELECT login LIKE '?' AND password LIKE '?' FROM uzytkownicy);");
                statement.setString(1, data[0]);
                statement.setString(2, data[1]);

Albo:

PreparedStatement statement = con.getConnection().prepareStatement("SELECT * FROM uzytkownicy WHERE login = ? AND password = ?);");
                statement.setString(1, data[0]);
                statement.setString(2, data[1]);

Potem sprawdzałem za pomocą if (statement.executeUpdate()) czy się udało. W przypadku dodawania użytkowników do bazy wszystko działa jak trzeba.

0

Przecież pytałeś o nazwisku oraz imieniu, jak to się ma do tego co "kombinowałeś"?

SELECT count(login) FROM uzytkownicy WHERE login='?' AND password='?'
0

Bo z tym też próbowałem, ale o tym nie wspomniałem w pierwszym poście, wybacz.

0

Patrząc na to co masz na końcu oraz całą składnie podanych przez ciebie komend SQL'a jestem absolutnie pewien że jeżeli próbowałeś to zupełnie nie to.

0

Chodzi o te setStringi? Czy o coś innego? Jak powinno to wyglądać poprawnie?

1
PreparedStatement statement = con.getConnection().prepareStatement("SELECT COUNT(login) FROM uzytkownicy WHERE login = ? AND password = ?");
0

Dzięki. Tylko teraz jak sprawdzić, czy podane dane się zgadzają?

1

Count da Ci jakąś liczbę :) jak się nie zgadzają to z wielkim prawdopodobieństwem będzie to... 0 :)

0

Tylko jak się do tej liczby dostać? Coś z ResultSet?

1

Tak
Nadaj jakiś alias dla count(login) w ten sposób count(login) as total

ResultSet rs = statement.executeQuery();
int count = rs.getInt("total");
0
statement = con.getConnection().prepareStatement("SELECT COUNT(login) as howMany FROM uzytkownicy WHERE login = '?' AND password = '?'");
                statement.setString(1, data[0]);
                statement.setString(2, data[1]);
                
                rs = statement.executeQuery();
                count = rs.getInt("howMany");
                if (count==1) {
                    success = true;
                }
                else if(count == 0){
                    success = false;
                }

Mam to w try-catch zapisane, i dostaje SQLException. Co jest nie tak?

1

Spróbuj alternatywnie bez aliasu i wtedy

rs.getInt(1);
0

To samo. Jak ten stack trace ogarnąć?

edit: nie wiem co jest nie tak, ale w Analyze Stack Window mam tylko to co trzymam w schowku.

1

już wiem :P nie wołasz

rs.next()

i kursor jest przed pierwszym rekordem

0

Wrzucam całą funkcję :P

public static boolean stringLogin(String login) throws ClassNotFoundException, SQLException{
        SqlConnection con = new SqlConnection();
        PreparedStatement statement = null;
        boolean success = false;
        ResultSet rs = null;
        int count = 0;
            if(login.contains("logowanie[")){
                int dlugosc = login.length();
                String cut = login.substring(10, dlugosc-1);
                String[] data = cut.split(",");
                data[0] = data[0].replaceAll("\\s+","");
                data[1] = data[1].replaceAll("\\s+","");
                try{
                statement = con.getConnection().prepareStatement("SELECT COUNT(login) FROM uzytkownicy WHERE login = '?' AND password = '?'");
                statement.setString(1, data[0]);
                statement.setString(2, data[1]);
                
                rs = statement.executeQuery();

                count = rs.getInt(1);
                   
                if (count==1) {
                    success = true;
                }
                else if(count == 0){
                    success = false;
                }
                }
            catch(SQLException e){
                System.out.println("Wystąpił bład");
                success = false;
                }
        }
            return success;
    }

Wiem, bałagan...

StackTrace:

java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:988)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:974)
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
	at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3813)
	at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3795)
	at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4616)
	at javaserver.JavaServer.stringLogin(JavaServer.java:51)
	at javaserver.JavaServer.main(JavaServer.java:144)
java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).
1

Usuń przy znakach zapytania apostrofy

0

Poszło... Ogromne dzięki garai za pomoc mimo późnej pory :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1