• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

jdbc brak reakcji na ograniczenie reakcji na NOT NULL

Object Storage Arubacloud
0 głosów
260 wizyt
pytanie zadane 5 czerwca 2018 w SQL, bazy danych przez Adrian Paź Obywatel (1,270 p.)

Witam jak w temacie: dlaczego mimo nie wpisania nic do np wartości imienia w


CREATE TABLE IF NOT EXISTS czytelnicy(
id_czytelnika INTEGER PRIMARY KEY AUTOINCREMENT,
imie CHAR(20) NOT NULL, 
nazwisko CHAR(20) NOT NULL, 
login VARCHAR(10) NOT NULL)

i tak mi dodaje czytelnika? trzeba dodatkowo sprawdzać czy jest null? To w takim razie po co takie ograniczenie które nie działa? Chyba, że źle je zapisałem..

komentarz 5 czerwca 2018 przez mbabane Szeryf (79,280 p.)
Pokaż jak dodajesz
komentarz 5 czerwca 2018 przez Adrian Paź Obywatel (1,270 p.)
public void dodajCzytelnika(String imie, String nazwisko, String login)
	{
		try
		{
			PreparedStatement preparedStatement = connection
					.prepareStatement("INSERT INTO czytelnicy VALUES(NULL, ?, ?, ?)");
			preparedStatement.setString(1, imie);
			preparedStatement.setString(2, nazwisko);
			preparedStatement.setString(3, login);
			preparedStatement.execute();
			preparedStatement.close();
			System.out.println("\nCzytelnik dodany !\n");
		} catch (SQLException e)
		{
			System.err.println(e);
		}
	}

 

komentarz 5 czerwca 2018 przez Adrian Paź Obywatel (1,270 p.)

Nawet sprawdzam w innej metodzie i tak bez rezultatu :/

public void wyswietlListeCzytelnikow()
	{
		boolean ok = false;
		try
		{
			ResultSet resultset = statement.executeQuery(
					"SELECT * FROM czytelnicy WHERE imie IS NOT NULL OR nazwisko IS NOT NULL OR login IS NOT NULL");
			while (resultset.next())
			{
				System.out.print("ID = " + resultset.getInt("id_czytelnika") + "\n" + "Imię = "
						+ resultset.getString("imie") + " \n" + "Nazwisko = " + resultset.getString("nazwisko") + " \n"
						+ "Login = " + resultset.getString("login"));
				System.out.println("\n");
				ok = true;
			}
			resultset.close();
			if (!ok)
			{
				System.out.println("Brak czytelników !\n");
			}
		} catch (SQLException e)
		{
			System.err.println("Problem z wyświetleniem danych !\n");
		}
	}

http://prntscr.com/jr9kln

komentarz 5 czerwca 2018 przez mbabane Szeryf (79,280 p.)

ok, a co podajesz jako parametry wywołując metodę dodajCzytelnika()?

komentarz 5 czerwca 2018 przez Adrian Paź Obywatel (1,270 p.)

dokładnie to wygląda to tak:

System.out.print("Imię: ");
String imie = scanner.nextLine();
System.out.print("Nazwisko: ");
String nazwisko = scanner.nextLine();
System.out.print("Login: ");
String login = scanner.nextLine();
biblioteka.dodajCzytelnika(imie, nazwisko, login);

 

komentarz 5 czerwca 2018 przez mbabane Szeryf (79,280 p.)
edycja 5 czerwca 2018 przez mbabane

Ok, robiąc tak:

String login = scanner.nextLine();

w Stringu nie będzie null tylko pusta wartość, zrób prosty test:

String login = scaner.nextLine();
if (login == null)
    sout("Null);
else 
  sout("not null"):

//sout = System.out.println
komentarz 5 czerwca 2018 przez Adrian Paź Obywatel (1,270 p.)
Hmmm no faktycznie to jak inaczej sprawdzać to? Da się jakoś to na null zamienić? Czy jest inny sposób?
1
komentarz 5 czerwca 2018 przez mbabane Szeryf (79,280 p.)

Takie coś nazywa się walidacją danych. W ORMie np. w Hibernate da się ustawić minimalną długość pola, w sql w sumie nie wiem jak to zrobić.

Generalnie powinno się (jeśli pole jest wymagane) ustalać jakąś minimalną długość (maksymalną rownież, aby nie zaśmiecać bazy) danego pola. W przypadku imienia  mogą to być np. co najmniej 3 znaki (np. Ewa), i takie sprawdzenie, w porządnej aplikacji, powinno gdzieś być zrobione. W sumie najlepiej chyba w javie bo wtedy nie tracimy czasu na przesłanie danych do silnika bazy - czyli gdzieś musisz mieć:

if (login.size() < 3) 
   //jakaś akcja, np. wyrzucenie wyjątku.
komentarz 5 czerwca 2018 przez Adrian Paź Obywatel (1,270 p.)
myślałem, że da się to ładniej zrobić, no ale trudno :D
komentarz 5 czerwca 2018 przez mbabane Szeryf (79,280 p.)
Da się ale dopiero chyba stosując orm.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 91 wizyt
pytanie zadane 6 czerwca 2018 w SQL, bazy danych przez Adrian Paź Obywatel (1,270 p.)
0 głosów
1 odpowiedź 362 wizyt
pytanie zadane 6 czerwca 2018 w SQL, bazy danych przez Adrian Paź Obywatel (1,270 p.)
0 głosów
0 odpowiedzi 68 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...