Diskuze: Sportka +Sqlite +Java = ..

Java Java Sportka +Sqlite +Java = ..

Avatar
j.c
Člen
Avatar
j.c:

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
Člen
Avatar
Odpovídá na j.c
Atrament:

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
BlugW
Redaktor
Avatar
Odpovídá na Atrament
BlugW:

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
Pořiď si mac na www.appletrh.cz. Novinky a zajímavosti ze světa Apple na https://www.applemagazin.eu
Avatar
Atrament
Člen
Avatar
Odpovídá na BlugW
Atrament:

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:

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:

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.