Diskuze: Prosím o pomoc
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 18 zpráv z 18.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.


Šoupni to prosím někam na pastebin. Když to kopíruju odtud, tak nevím, jestli to je nějaká ochrana při detekci licence, nebo ne, ale každopádně háže mi to nejspíš náhodně do slov pomlčky, takže když si to vložím do studia, tak to je nečitelné.
osm70 to tu vložil ako citáciu, nie ako kód, to preto.
Na 142 otevíráš channel.
Na 171 ho následně zavíráš.
Na 180 se z něj pokoušíš číst, i když už je 171 zavřený.
Na 206 se z něho znovu ve stejném bloku kódu pokoušíš číst (why?!)
Na 140 si inicializuješ proměnnou na výsledek, který ti to vrací vždy, protože máš uzavřený channel (socket) a tím pádem se do ní nic jiného nenastaví.
Takže teď zjednodušeně: odešleš přes socket požadavek na vytvoření usera a ihned ho zavřeš. Poté kontroluješ proměnnou "odpovědi", kterou si hned na začátek inicializuješ jako určitý druh odpovědi.
Proměnnou si inicializuj "nějak" a pak porovnávej, jestli je proměnná stejná a tím pádem zjistíš, že jsi nedostal odpověď ze serveru a nebo jestli je jiná, která bude mít X hodnot (účet vytvořen, nastala neznámá chyba, účet již existuje, atp.).
A pokud ti to vytváří uživatele i když již existuje (což by v ideálním případě nemělo na straně databáze), tak budeš mít nejspíš nějaký problém v bloku
ResultSet r = s.executeQuery("select * from user");
while (r.next()) {
String username = r.getString("name");
System.out.println(username);
if (array[0].equals(username)) {
taken = true;
}
}
Osobně bych nebral vše z databáze, ale bral bych jen zadané uživatelské
jméno (select whatever from user where name = proměnná)
a poté ověřoval přes
if (r.next()) {
taken = true;
}
Snad jsem tvůj kód pochopil správně a ty chápeš mě. 
Zkusil jsem odstranit řádek 171 na kterém zavírám channel a dělá to pořád to samé.
Po odstranění 195 to už nevyhazuje vyjímku, ale pořád hlásí, že jméno je obsazené.
Účet to do DB zapisuje jen když neexistuje. Pokud udělám nový, vytvoří se, ale client řeknem že je jméno obsazeno.
Udělej to, co zmiňuji výše. Odeber ten jeden zbytečný (duplicitní) úsek čtení, pokud k jeho přítomnosti zde nemáš nějaký speciální důvod a zkus zjistit, zda-li dostáváš vůbec nějakou odpověď.
Potom budeš vědět, jakou cestou se ubírat dál. (jestli řešit proč dostáváš "takovou" odpověď ze serveru, nebo proč žádnou nedostáváš)
Nové informace:
if (tmp=='O') //napiš OK
if (tmp=='F' //obsazeno)
else //chyba připojení
System.out.println(tmp);
Dostanu se do else (chyba připojení), ale na konzoli se mi vypíše O.
Ahoj, protože by to mělo být if - else if - else.
Teď když je to OK, tak se dostaneš do O a potom protože to není F, tak se
dostaneš do else.
Předělal jsem to na else if a pořád to dělá to samé. A navíc, v tmp mám vždy O, i když je jméno obsazeno.
Přepsal jsi si už inicializaci proměnné tmp na něco jiného, než návratovou hodnotu (O) ?
Tak v tom případě boolean taken není nikdy true a máš problém někde v ověřování v podmínce
try {
Connection con = DriverManager.getConnection(url, name, pass);
Statement s = con.createStatement();
ResultSet r = s.executeQuery("select * from user");
while (r.next()) {
String username = r.getString("name");
System.out.println(username);
if (array[0].equals(username)) {
taken = true;
}
}
} catch (SQLException ex) {
}
a nebo ti rotuje v nějakém cyklu deklarace s inicializací Boolean taken = false; a vždy ti to přepíše hodnotu true zpět na false (méně pravděpodobná možnost).
Potom ti to musí fungovat. ověř si ještě hodnotu "taken" za "Returning result".
EDIT: Teď jsem si ještě všimnul... jakým způsobem proměnnou "taken" resetuješ ? Vidím, že ji nastavíš jednou na true a při dalším požadavku ?
Nastavuji ji uvnitř mé nekonečné smyčky. Smyčka se ukončí odpojením klienta. Při dalším připojení by měla začít znova. Aspoň myslím...
Zobrazeno 18 zpráv z 18.