IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Sportka +Sqlite +Java = ..

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

Aktivity
Avatar
j.c.
Člen
Avatar
j.c.:17.3.2015 18:26

Z didaktického důvodu jsem si naprogramoval aplikaci generující náhodné tipy, importující čísla sportky od roku 57 a sledující úspěšnost těch náhodných tipů od roku 57.
Třeba posouzení 1000 náhodných tipů na celou historii sportky trvá asi 10 sekund.

Sčítám jen, kolikrát bylo uhodnuto číslo když byl překročen minimální počet čísel.

Mám tabulku Sportka
CREATE TABLE "Sportka" ("NoS" INTEGER PRIMARY KEY NOT NULL DEFAULT (null) ,"Datum" INTEGER DEFAULT (null) ,"Rok" INTEGER,"Tyden" INTEGER,"Den" INTEGER,"1_cis­lo1_tah" INTEGER,"2_cis­lo1_tah" INTEGER,"3_cis­lo1_tah" INTEGER,"4_cis­lo1_tah" INTEGER,"5_cis­lo1_tah" INTEGER,"6_cis­lo1_tah" INTEGER,"dodat­kove_cislo1_tah" INTEGER,"1_cis­lo2_tah" INTEGER,"2_cis­lo2_tah" INTEGER,"3_cis­lo2_tah" INTEGER,"4_cis­lo2_tah" INTEGER,"5_cis­lo2_tah" INTEGER,"6_cis­lo2_tah" INTEGER,"dodat­kove_cislo2_tah" INTEGER)
a tabulku Tipy (Tipyv)
CREATE TABLE Tipy ("No" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL ,"1_cislo" INTEGER DEFAULT (null) ,"2_cislo" INTEGER DEFAULT (null) ,"3_cislo" INTEGER DEFAULT (null) ,"4_cislo" INTEGER DEFAULT (null) ,"5_cislo" INTEGER DEFAULT (null) ,"6_cislo" INTEGER DEFAULT (null) ,"uspesnost" INTEGER DEFAULT (null))

počítání, kolikrát byl úspěšný tip v prvním, nebo v druhém tahu nepokládám za pomalé ale ten kód pokládám za naprostou šílenost.

Konstrukce sql pro execute() vypadá takto:

sql = "INSERT INTO Tipy SELECT No,\"1_cislo\" ,\"2_cislo\" ,\"3_cislo\" ,\"4_cislo\" ,\"5_cislo\" ,\"6_cislo\",SUM(uspesnost) FROM "
+"(SELECT No,\"1_cislo\" ,\"2_cislo\" ,\"3_cislo\" ,\"4_cislo\" ,\"5_cislo\" ,\"6_cislo\" , "
+  "CASE WHEN a1+a2+a3+a4+a5+a6>=3 "
+       " THEN CASE WHEN b1+b2+b3+b4+b5+b6>=3 "
+                     " THEN b1+b2+b3+b4+b5+b6+a1+a2+a3+a4+a5+a6 "
+                             " ELSE a1+a2+a3+a4+a5+a6"
+                     " END             "
+          " ELSE "
+               " CASE WHEN b1+b2+b3+b4+b5+b6>=3 "
+                       " THEN b1+b2+b3+b4+b5+b6 "
+                       " ELSE 0 "
+               " END "
+"       END "
+"  AS uspesnost "
+"FROM  (SELECT \"No\",\"1_cislo\" ,\"2_cislo\" ,\"3_cislo\" ,\"4_cislo\" ,\"5_cislo\" ,\"6_cislo\" , "
+"CASE WHEN \"1_cislo\" IN (\"s\".\"1_cislo_1_tah\", \"s\".\"2_cislo_1_tah\", \"s\".\"3_cislo_1_tah\", \"s\".\"4_cislo_1_tah\", \"s\".\"5_cislo_1_tah\" , \"s\".\"6_cislo_1_tah\") THEN 1 ELSE 0 END AS a1, "
+"CASE WHEN \"2_cislo\" IN (\"s\".\"1_cislo_1_tah\", \"s\".\"2_cislo_1_tah\", \"s\".\"3_cislo_1_tah\", \"s\".\"4_cislo_1_tah\", \"s\".\"5_cislo_1_tah\" , \"s\".\"6_cislo_1_tah\") THEN 1 ELSE 0 END AS a2, "
+"CASE WHEN \"3_cislo\" IN (\"s\".\"1_cislo_1_tah\", \"s\".\"2_cislo_1_tah\", \"s\".\"3_cislo_1_tah\", \"s\".\"4_cislo_1_tah\", \"s\".\"5_cislo_1_tah\" , \"s\".\"6_cislo_1_tah\") THEN 1 ELSE 0 END AS a3, "
+"CASE WHEN \"4_cislo\" IN (\"s\".\"1_cislo_1_tah\", \"s\".\"2_cislo_1_tah\", \"s\".\"3_cislo_1_tah\", \"s\".\"4_cislo_1_tah\", \"s\".\"5_cislo_1_tah\" , \"s\".\"6_cislo_1_tah\") THEN 1 ELSE 0 END AS a4, "
+"CASE WHEN \"5_cislo\" IN (\"s\".\"1_cislo_1_tah\", \"s\".\"2_cislo_1_tah\", \"s\".\"3_cislo_1_tah\", \"s\".\"4_cislo_1_tah\", \"s\".\"5_cislo_1_tah\" , \"s\".\"6_cislo_1_tah\") THEN 1 ELSE 0 END AS a5, "
+"CASE WHEN \"6_cislo\" IN (\"s\".\"1_cislo_1_tah\", \"s\".\"2_cislo_1_tah\", \"s\".\"3_cislo_1_tah\", \"s\".\"4_cislo_1_tah\", \"s\".\"5_cislo_1_tah\" , \"s\".\"6_cislo_1_tah\") THEN 1 ELSE 0 END AS a6, "
+"CASE WHEN \"1_cislo\" IN (\"s\".\"1_cislo_2_tah\", \"s\".\"2_cislo_2_tah\", \"s\".\"3_cislo_2_tah\", \"s\".\"4_cislo_2_tah\", \"s\".\"5_cislo_2_tah\" , \"s\".\"6_cislo_2_tah\") THEN 1 ELSE 0 END AS b1, "
+"CASE WHEN \"2_cislo\" IN (\"s\".\"1_cislo_2_tah\", \"s\".\"2_cislo_2_tah\", \"s\".\"3_cislo_2_tah\", \"s\".\"4_cislo_2_tah\", \"s\".\"5_cislo_2_tah\" , \"s\".\"6_cislo_2_tah\") THEN 1 ELSE 0 END AS b2, "
+"CASE WHEN \"3_cislo\" IN (\"s\".\"1_cislo_2_tah\", \"s\".\"2_cislo_2_tah\", \"s\".\"3_cislo_2_tah\", \"s\".\"4_cislo_2_tah\", \"s\".\"5_cislo_2_tah\" , \"s\".\"6_cislo_2_tah\") THEN 1 ELSE 0 END AS b3, "
+"CASE WHEN \"4_cislo\" IN (\"s\".\"1_cislo_2_tah\", \"s\".\"2_cislo_2_tah\", \"s\".\"3_cislo_2_tah\", \"s\".\"4_cislo_2_tah\", \"s\".\"5_cislo_2_tah\" , \"s\".\"6_cislo_2_tah\") THEN 1 ELSE 0 END AS b4, "
+"CASE WHEN \"5_cislo\" IN (\"s\".\"1_cislo_2_tah\", \"s\".\"2_cislo_2_tah\", \"s\".\"3_cislo_2_tah\", \"s\".\"4_cislo_2_tah\", \"s\".\"5_cislo_2_tah\" , \"s\".\"6_cislo_2_tah\") THEN 1 ELSE 0 END AS b5, "
+"CASE WHEN \"6_cislo\" IN (\"s\".\"1_cislo_2_tah\", \"s\".\"2_cislo_2_tah\", \"s\".\"3_cislo_2_tah\", \"s\".\"4_cislo_2_tah\", \"s\".\"5_cislo_2_tah\" , \"s\".\"6_cislo_2_tah\") THEN 1 ELSE 0 END AS b6 "

+"FROM Tipyv,  Sportka s  ) ) GROUP BY No ";

přijde mi to jako šílené, sledování uvozovek a závorek a CASE .. hodně to bolí. Proto bych tu rád poprosil o radu, doporučení, jak takové SQL dotazy řešit. Zkoušel jsem si je v SQLite manageru a pak to zkonvertoval do stringu, a to je také otrava, dodělat další uvozovky, sčítání do řetězce. Nechce se mi věřit, že by se to takto MĚLO DĚLAT. Že se to tak může, mi přijde příšerné. Moc děkuji za milé a tolerantní odpovědi.

 
Odpovědět
17.3.2015 18:26
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na j.c.
Atrament:17.3.2015 20:19

Pokud ti jde o to naučit se zacházet s Sql v Javě tak bys měl obrátit svoji pozornost k Hibernate - velmi velmi stručně jde o framework umožňující namapovat databázi na objekty v Javě a pracovat tak s daty pomocí normálních konstrukcí Javy.

 
Nahoru Odpovědět
17.3.2015 20:19
Avatar
Odpovídá na Atrament
Neaktivní uživatel:17.3.2015 20:21

Jen tak dotaz pro mě.

Hibernate v javě je něco jako Doctrine ORM v PHP a Entity Framework v C#?

Editováno 17.3.2015 20:22
Nahoru Odpovědět
17.3.2015 20:21
Neaktivní uživatelský účet
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Atrament:17.3.2015 21:13

Ani s jedním jsem nikdy nepracoval, ale co jsem tak letmo vygooglil, tak by to mělo fungovat podobně.

 
Nahoru Odpovědět
17.3.2015 21:13
Avatar
j.c.
Člen
Avatar
Odpovídá na Atrament
j.c.:18.3.2015 7:56

pro začátek :) jsem doufal v nějaké postrčení směrem:
dlouhý řetězec zapíšeš takto
<longstring>
line1
..
line10
</longstring>
do zvláštního souboru to nedávej, je to pak nepřehledné..

a odkaz někam, kde se dá najít systém, kdy SQL vyžaduje u každého pole uvozovky a kde nemusí být (huh, asi bych se měl podívat na hranaté závorky?)

Díky.

 
Nahoru Odpovědět
18.3.2015 7:56
Avatar
j.c.
Člen
Avatar
Odpovídá na j.c.
j.c.:18.3.2015 8:34

První krok by byl, tohle je mnohem jednodušší 8|

sql = "INSERT INTO Tipy SELECT [No],[1_cislo] ,[2_cislo] ,[3_cislo] ,[4_cislo] ,[5_cislo] ,[6_cislo],SUM(uspesnost) FROM "
+"(SELECT [No],[1_cislo] ,[2_cislo] ,[3_cislo] ,[4_cislo] ,[5_cislo] ,[6_cislo] , "
+"  CASE WHEN a1+a2+a3+a4+a5+a6>=3 "
+"       THEN CASE WHEN b1+b2+b3+b4+b5+b6>=3 "
+"                    THEN b1+b2+b3+b4+b5+b6+a1+a2+a3+a4+a5+a6 "
+"                            ELSE a1+a2+a3+a4+a5+a6 "
+"                    END "
+"         ELSE "
+"              CASE WHEN b1+b2+b3+b4+b5+b6>=3 "
+"                      THEN b1+b2+b3+b4+b5+b6 "
+"                      ELSE 0 "
+"              END"
+"       END "
+"  AS uspesnost "
+" FROM  (SELECT [No],[1_cislo] ,[2_cislo] ,[3_cislo] ,[4_cislo] ,[5_cislo] ,[6_cislo] , "
+" CASE WHEN [1_cislo] IN ([s].[1_cislo_1_tah], [s].[2_cislo_1_tah], [s].[3_cislo_1_tah], [s].[4_cislo_1_tah], [s].[5_cislo_1_tah] , [s].[6_cislo_1_tah]) THEN 1 ELSE 0 END AS a1,"
+" CASE WHEN [2_cislo] IN ([s].[1_cislo_1_tah], [s].[2_cislo_1_tah], [s].[3_cislo_1_tah], [s].[4_cislo_1_tah], [s].[5_cislo_1_tah] , [s].[6_cislo_1_tah]) THEN 1 ELSE 0 END AS a2,"
+" CASE WHEN [3_cislo] IN ([s].[1_cislo_1_tah], [s].[2_cislo_1_tah], [s].[3_cislo_1_tah], [s].[4_cislo_1_tah], [s].[5_cislo_1_tah] , [s].[6_cislo_1_tah]) THEN 1 ELSE 0 END AS a3,"
+" CASE WHEN [4_cislo] IN ([s].[1_cislo_1_tah], [s].[2_cislo_1_tah], [s].[3_cislo_1_tah], [s].[4_cislo_1_tah], [s].[5_cislo_1_tah] , [s].[6_cislo_1_tah]) THEN 1 ELSE 0 END AS a4,"
+" CASE WHEN [5_cislo] IN ([s].[1_cislo_1_tah], [s].[2_cislo_1_tah], [s].[3_cislo_1_tah], [s].[4_cislo_1_tah], [s].[5_cislo_1_tah] , [s].[6_cislo_1_tah]) THEN 1 ELSE 0 END AS a5,"
+" CASE WHEN [6_cislo] IN ([s].[1_cislo_1_tah], [s].[2_cislo_1_tah], [s].[3_cislo_1_tah], [s].[4_cislo_1_tah], [s].[5_cislo_1_tah] , [s].[6_cislo_1_tah]) THEN 1 ELSE 0 END AS a6,"
+" CASE WHEN [1_cislo] IN ([s].[1_cislo_2_tah], [s].[2_cislo_2_tah], [s].[3_cislo_2_tah], [s].[4_cislo_2_tah], [s].[5_cislo_2_tah] , [s].[6_cislo_2_tah]) THEN 1 ELSE 0 END AS b1,"
+" CASE WHEN [2_cislo] IN ([s].[1_cislo_2_tah], [s].[2_cislo_2_tah], [s].[3_cislo_2_tah], [s].[4_cislo_2_tah], [s].[5_cislo_2_tah] , [s].[6_cislo_2_tah]) THEN 1 ELSE 0 END AS b2,"
+" CASE WHEN [3_cislo] IN ([s].[1_cislo_2_tah], [s].[2_cislo_2_tah], [s].[3_cislo_2_tah], [s].[4_cislo_2_tah], [s].[5_cislo_2_tah] , [s].[6_cislo_2_tah]) THEN 1 ELSE 0 END AS b3,"
+" CASE WHEN [4_cislo] IN ([s].[1_cislo_2_tah], [s].[2_cislo_2_tah], [s].[3_cislo_2_tah], [s].[4_cislo_2_tah], [s].[5_cislo_2_tah] , [s].[6_cislo_2_tah]) THEN 1 ELSE 0 END AS b4,"
+" CASE WHEN [5_cislo] IN ([s].[1_cislo_2_tah], [s].[2_cislo_2_tah], [s].[3_cislo_2_tah], [s].[4_cislo_2_tah], [s].[5_cislo_2_tah] , [s].[6_cislo_2_tah]) THEN 1 ELSE 0 END AS b5,"
+" CASE WHEN [6_cislo] IN ([s].[1_cislo_2_tah], [s].[2_cislo_2_tah], [s].[3_cislo_2_tah], [s].[4_cislo_2_tah], [s].[5_cislo_2_tah] , [s].[6_cislo_2_tah]) THEN 1 ELSE 0 END AS b6 "
+" FROM Tipyv,  Sportka s  )) GROUP BY No ";
 
Nahoru Odpovědět
18.3.2015 8:34
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.