jak "unvalidować" int

0

Samo walidacja w Jawie to dobra rzecz. Ale bez przesady. Jestem przyzwyczajony do C i to co się w Javie wyprawia to nie mieści mi się w głowie :-O .
Miadnowicie, nie mogę zwrócić typu int ziterowanego w pętli. Macie jakieś pomysły żeby to zrobić ??. Chciałbym zwrócić ilość wierszy zwróconych przez ResultSet z Statement z połączenia do bazy danych..

 Żaden z poniższych przykładów mi nie działa:
int i;
for (i=0;resultSet.next();i++) {
    resultSet.getInt(1);
}
resultSet.close();
return i;
Integer i = new Integer(0);
for (i=0;resultSet.next();i++) {
    resultSet.getInt(1);
}
resultSet.close();
return i;
Integer i = new Integer(0);
for (i=0;resultSet.next();i++) {
    resultSet.getInt(1);
}
//resultSet.close();
return resultSet.getRow() ;
0

Jakie piękne słowo "unvalidować" :|

Co jak co, ale pętla for oraz zwracanie typów pierwotnych (np. inty) są identyczne w Javie i C.

Jeżeli dostajesz 0, to znaczy, że pętla wykonała się 0 razy.

0

krzysiek tak tylko że ta pętla mi działa na pewno. Bo tworzy mi Beamy. Może dam kod to zrozumiesz o co kaman

    public int select(String Tables, String Conditions) throws SQLException, ExceptionThrow, FileNotFoundException, IOException {
        ResultSet resultSet = Statement.executeQuery("Select * from " + Tables + " where " + Conditions);
        int i;

        if (Tables.compareTo("Loginy") == 0) {
            Loginy login = new Loginy();
            for (i=0;resultSet.next();i++) {
                login.setId(resultSet.getInt(1));
                login.setLogin(resultSet.getString(2));
                login.setHaslo(resultSet.getString(3));
                ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream("Login" + i));
                objectOutputStream.writeObject(login);
            }
            resultSet.close();
            return i ;
        } else 
....

wszystkie beamy które Tworze czyli :
Login0
Login1
....
itd

tworzy bez problemu, bo potem je zczytuje w innym obikecie, Czyli jednak pętla działa, licznik nie jest zwracany tylko zerowany.

Chciałem napisać program sieciowy ze wzorcem MVC. Ale po dzisiejszej niespodziance dochodze do wniosku że Java się nie nadaje do programów sieciowych.

0

nie analizowalem dokladnie, ale i sie nie zeruje na pewno. Interesuje mnie tylko konstrukcja

for (i=0;resultSet.next();i++) {

nie za bardzo rozumiem srodkowego argumentu..mozliwe ze jestem nie douczony ; )

0

Odpal taki kod:

public class ForTest {

	public static void main(String[] args) {
		System.out.println("" + foo());
	}

	private static int foo() {
		int i;
		for (i = 0; i < 10; i++) {
			// nic
		}
		return i;
	}
}

Dostaniesz 10. Błąd jest w innym miejscu.

ResultSet resultSet = Statement.executeQuery("Select * from " + Tables + " where " + Conditions);

Słyszałeś o SQL injection? Mam nadzieję, że Tables i Conditions pochodzą z zaufanego źródła (nie mogą pochodzić od użytkownika).

@Freakman
http://java.sun.com/javase/6/docs/api/java/sql/ResultSet.html
next() jest OK.

0

Mogłeś zajrzeć do API ;)

 Przesówa kursor w krotkach. Zwraca true jak jeszcze kursor nie jest na ostatniej pozycji. False jeśli pozycja jest ostatnia.

 W efekcie dostajesz informacje krotka po krotce. Jak umieścisz to w pętli jako warunek samo Ci przesówa i zakańcza pętle.

Zwracam honor Javie i przepraszam Was chłopaki. Pętla się nie wykonywała bo przekazywałem błędny SELECT w klauzurze WHERE . A beany nadal były zapisane ponieważ nie zmknąłem przeglądarki.

Przepraszam o upierd**ść  :D

Temat można zamknąć

Krzysiek słyszałem o tym. Walidacje zrobie na samym końcu. na razie chciałbym stworzyć funkcjonalność.

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