[JAVA] Problem z wczytywaniem z konsoli


(Natalia16k) #1

Witam,

jestem początkująca w javie i mam napisać program czytający z wiersza poleceń dane podane przez użytkownika i używający ich w zapytaniach do bazy danych. Najpierw wywołuję funkcję tworzącą tabelę:

public static String stworzTab(Statement zapytanie) throws SQLException{


	Scanner czytaj = new Scanner(System.in);


	System.out.println("Podaj nazwe tabeli: ");

	String nazwaTab = czytaj.next();


	usunTab(nazwaTab,zapytanie);

	zapytanie.execute("CREATE TABLE "+nazwaTab+" (NAZWISKO CHAR(20),PENSJA MONEY);");


	czytaj.close();

	System.out.println("Stworzono tabele "+nazwaTab+" o atrybutach NAZWISKO CHAR(20) i PENSJA MONEY");


	return nazwaTab;

}

Tu podaję nazwę i zatwierdzam enterem, a potem wywołuję funkcję dodającą rekord do tej tabeli:

public static void dodajRekord(String nazwaTab,Statement zapytanie) throws SQLException{

	Scanner czytaj = new Scanner(System.in);


	System.out.println("Podaj nazwisko: ");

	String nazwisko = czytaj.next();


	System.out.println("Podaj pensje: ");

	double pensja = czytaj.nextDouble();



	zapytanie.execute("INSERT INTO "+nazwaTab+"(NAZWISKO,PENSJA) VALUES("+nazwisko+","+pensja+");");

	System.out.println("Dodano rekord");


	czytaj.close();

}

Ale po wypisaniu "Podaj nazwisko:" pojawia się błąd:

Exception in thread "main" java.util.NoSuchElementException

	at java.util.Scanner.throwFor(Unknown Source)

	at java.util.Scanner.next(Unknown Source)

Nie mogę tego błędu ominąć w żaden sposób, dlatego bardzo proszę o pomoc. Z góry dzięki za poświęcenie czasu :wink:


(kostek135) #2

metoda close() klasy Scanner zamyka cały strumień. Zatem zwolnione zostanie całe System.in. Można albo bawić się w ponowne otwarcie, albo zrobić pole statyczne i zamknąć je dopiero na końcu main-a.


(Natalia16k) #3

Wielkie dzięki za pomoc. Teraz działa jak należy, ale za to nie działa mi zapytanie... Jednak to pewnie tylko jakaś literówka, więc chyba jakoś sobie poradzę. Jeszcze raz wielkie dzięki :wink: