V případě, že máte výchozí nastavení vývojového prostředí Idea, může se vám stávat, že že záložky (otevřené soubory), u kterých si jste jistí, že jste je nezavírali, nejsou mezi otevřenými záložkami. Idea má totiž nastaven limit záložek (na 10) a v případě, že otevíráte další a další záložky, zavře záložku, která byla nejméně často používána. Toto chování lze samozřejmě změnit. File -> Settings -> Editor -> General -> Editor Tabs.
vitfo
Archetyp quickstart
Maven archetype je předdefinovaný vzor (forma, šablona) projektu a může být použit pro vygenerování nového projektu. Projekty vygenerované podle jednoho archetypu mají stejnou strukturu. V Mavenu je celá řada připravených šablon (archetypů). Jednou z nich je archetyp quickstart.
Parametry
groupId: vitfo.cz
artifactId: quickstart_project
version: 1.0-SNAPSHOT
Vygenerovaná struktura
quickstart_project │ pom.xml │ └───src ├───main │ └───java │ └───cz │ └───vitfo │ App.java │ └───test └───java └───cz └───vitfo AppTest.java
Komentáře v SQL Developer
V SQL se pro komentování bloku kódu používá /* */
a pro komentování řádku --
(dvě pomlčky). V Oracle SQL Developer existuje pro řádkové komentáře klávesová zkratka Ctrl + / (také je možné přes pravé tlačítko myši a volbu Toggle Line Comments). V tomto případě se před řádku, ve které se nachází kurzor (a nebo před všechny označené řádky) doplní --
. V případě, že používáte českou klávesnici, tato klávesová zkratka nebude fungovat. Řešením je přiřadit dané akci jinou klávesovou zkratku. Tools -> Preferences -> Shortcut Keys. Do vyhledávání napiště comment a označte vyhledaný řádek.
Do textového pole New Shortcut zadejte klávesovou zkratku dle vlastní libosti. V tomto případě jsem si vybral Ctrl + / (na numerické klávesnici). Klikněte na Assign a OK:
Přidání názvů sloupců do selectu v SQL Developer
Do SQL selektu je někdy nutné (místo *) nadefinovat sloupce, které se mají vracet. Těchto sloupců může být docela hodně a jejich vypisování je zdlouhavé a náchylné na chyby. Oracle SQL Developer tuto práci zjednodušuje. Napište si select.
select * from SYS.ALL_TAB_COLUMNS where column_name like 'ID'
Kurzor umístěte do názvu tabulky (v tomto případě ALL_TAB_COLUMNS). Klikněte Shift + F4 (nebo pravým tlačítkem myši a „Popup Describe“). Chvíli počkejte a otevře se vám okno. V záložce „Columns“ vyberte požadované sloupce (pomocí Shift nebo Ctrl).
Hvězdičku ze selektu smažte a na její místo myší přetáhněte označené sloupce. Názvy sloupců, oddělené čárkami, se vloží do selektu.
select TABLE_NAME,COLUMN_NAME,DATA_TYPE,COLUMN_ID from SYS.ALL_TAB_COLUMNS where column_name like 'ID'
Zdroj: thatjeffsmith.com/…/more-column-copy-tricks-in-oracle-sql-developer/
Nastavení zobrazování okna s doplňováním kódu v SQL Developer
Oracle SQL Developer umožňuje zobrazování vyskakovacího okna s možnostmi pro doplňování kódu při psaní SQL. Stručně řečeno umožňuje zobrazování nápovědy při psaní. Okno se může zobrazovat hned při psaní nebo po stisknutí Ctrl + mezerník.
To, zda se má okno zobrazovat, rychlost jeho zobrazení nebo pro kolik záznamů maximálně se má zobrazit, se nastaví v Tools -> Preferences -> Code Editor -> Completion Insight.
Pokud vás vyskakovací okno obtěžuje, můžete Auto-Popup vypnout a nápovědu si zobrazit pomocí Ctrl + mezerník jen když budete potřebovat.
Testování error kódu výjimky v TestNG
Testovací framework TestNG umožňuje testovat nejen to, že metoda vrací výjimku a zároveň typ (třídu) vracené výjimky, ale též umožňuje otestovat zprávu, kterou tato výjimka obsahuje. To je vhodné například u vlastní výjimky, která vrací nějaký chybový kód. Otestujeme tedy nejen, že metoda v určitých případech vyhazuje chybu, ale také, zda vrací správný chybový kód.
Enum obsahující chybové kódy
public enum ErrorCode { X_IS_TO_BIG("X1111"), Y_IS_TO_BIG("Y1122"), Y_IS_BIGGER_THAN_X("Y1133"); private final String code; private ErrorCode(String code) { this.code = code; } public String getCode() { return this.code; } }
Třída představující naši chybu (exception)
public class MyException extends RuntimeException { public MyException(String errorCode) { super(errorCode); } }
Třída, jejíž metodu budeme testovat
public class MyObject { private static final int X_MAX_VALUE = 100; private static final int Y_MAX_VALUE = 50; public int count(int x, int y) { if (x > X_MAX_VALUE) { throw new MyException(ErrorCode.X_IS_TO_BIG.getCode()); } if (y >= Y_MAX_VALUE) { throw new MyException(ErrorCode.Y_IS_TO_BIG.getCode()); } if (y > x) { throw new MyException(ErrorCode.Y_IS_BIGGER_THAN_X.getCode()); } return (x + y) / (x + y); } }
Budeme testovat, zda metoda správně vrací výsledek (public void countOk()
) a zda vyhazuje chybu se správných kódem v případě, že zadané číslo x nebo y je příliš velké (public void countXToBig()
, public void countYToBig()
), nebo když je y větší než x (public void countYBiggerThanX()
).
import org.testng.annotations.Test; import static org.testng.Assert.assertEquals; public class MyObjectTest { @Test(expectedExceptions = {MyException.class}, expectedExceptionsMessageRegExp = ".*X111.*") public void countXToBig() { int result = new MyObject().count(10_000, 12); } @Test(expectedExceptions = {MyException.class}, expectedExceptionsMessageRegExp = "Y.*22") public void countYToBig() { int result = new MyObject().count(9, 5_000); } @Test(expectedExceptions = {MyException.class}, expectedExceptionsMessageRegExp = "Y1133") public void countYBiggerThanX() { int result = new MyObject().count(22, 27); } @Test() public void countOk() { int result = new MyObject().count(8, 5); assertEquals(result, 1); } }
ROWNUM v Oracle
ROWNUM není skutečný sloupec, ale pseudo sloupec, který je k dispozici v dotazu. ROWNUM je číslo od jedničky po N, kde N je počet záznamů vrácených dotazem a toto číslo je přidáno záznamu ještě předtím, než proběhne část ORDER BY. ROWNUM je pouze dočasné číslo. ROWNUM je navýšeno teprve poté, co je přiřazeno záznamu a vyhodnocena podmínka v WHERE části.
select * from table_name where rownum > 1
Nevrátí žádný záznam. První zázname má ROWNUM 1. Vyhodnocení WHERE ROWNUM > 1 je tedy false. ROWNUM se nenavýší a tím pádem tato podmínka nebude nikdy splněna.
select * from table_name where rownum >= 1
Vrátí všechny záznamy.
select * from table_name where rownum < 5
Vrátí první 4 záznamy.
select t.*, rownum from table_name t order by t.column_name
Nejdříve přiřadí ROWNUM jednotlivým řádkům a teprve poté seřadí výstup. Je pravděpodobné, že ROWNUM budou rozházená a případná podmínka WHERE ROWNUM < cislo
by vrátila sice správný počet záznamů, ale neseřazeně. Řešením je následující select.
select rownum, t.* from ( select * from table_name order by column_name) t where rownum <= 5
Vrátí prvních pět výsledků dle řazení.
Pomocí ROWNUM je možné výsledek dotazu stránkovat, avšak je třeba použít ještě jeden select.
select * from ( select rownum as cisla_radku, t.* from ( select * from table_name order by column_name) t ) where cisla_radku between 10 and 15;
Vrátí desátý až patnáctý záznam (dle řazení) včetně. Podmínku WHERE je možné samozřejmě použít i ve vnořeném selectu.
select * from ( select rownum as cisla_radku, t.* from ( select * from table_name where nejaka_podminka order by column_name) t ) where cisla_radku between 10 and 15;
Zdroje:
Minimální pom.xml
Minimální pom.xml
musí být uvozen tagem <project>
a musí obsahovat tagy <modelVersion>
, <groupId>
, <artifactId>
a <version>
.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>cz.vitfo</groupId> <artifactId>projekt</artifactId> <version>0.0.1-SNAPSHOT</version> </project>
<modelVersion>4.0.0</modelVersion>
Určuje verzi modelu pom. Aktuálně je podporována pouze verze 4.0.0. Tento tag je povinný.
<groupId>cz.vitfo</groupId>
Identifikuje firmu, skupinu, nebo vývojáře, který tento projekt vytvořil. Nejčastěji se používá se url (psaná od domény nejvyšího řádu), kterou má daná firma, skupina, vývojář zaregistrovánu, protože se jedná o jedinečný identifikátor.
<artifactId>projekt</artifactId>
Identifikuje projekt. Musí být jedinečný v rámci groupId. Společnost (vývojář) mohou vytvořit více projektů (stejné groupId), ale tyto projekty musí mít jedinečné artifactId.
<version>0.0.1-SNAPSHOT</version>
Určuje verzi projektu. Slovo SNAPSHOT se používá v případě, že projekt je ve vývoji.
Tagy groupId, artifactId a version se zazývají GAV souřadnice a jednoznačně určují soubor projektu.
Pole v PostgreSQL
PostgreSQL umožňuje nastavit sloupec jako několika rozměrné pole. V tomto příspěvku ukážu vytvoření sloupců, které budou obsahovat jednorozměrné pole.
Vytvoření tabulky favorite a naplnění daty.
create table favorite ( id serial not null, person_id int not null, favorite_names varchar(15)[], favorite_numbers int[], primary key(id) ); insert into favorite (person_id, favorite_names, favorite_numbers) values (4, '{"Petr", "Anna"}', '{7, 11, 23, 999}'), (5, array['Alena'], '{1}'), (7, '{"Marie", "Aneta", "Petr"}', array[17, 24]), (9, array['Pankrác', 'Servác', 'Bonifác'], array[111, 13, 9, 2]);
Třetí sloupec obsahuje pole řetězců a čtvrtý sloupec pole celých čísel. Pole je možné vytvořit pomocí složených závorek a nebo pomocí konstruktoru ARRAY.
Zobrazení tabulky favorite.
select * from favorite;
Vypsání záznamů, které mají první záznam v poli favorite_numbers větší, než druhý záznam.
select * from favorite where favorite_numbers[1] > favorite_numbers[2];
Vypíše třetí oblíbené jméno a druhé oblíbené číslo pro každý záznam.
select favorite_names[3] as "Třetí oblíbené jméno", favorite_numbers[2] as "Druhé oblíbené číslo" from favorite;
Zobrazí pro každý záznam počet položek v poli favorite_names (počet oblíbených jmen).
select array_length(favorite_names, 1) as pocet_oblibenych_jmen from favorite;
Zdroje:
View tables v PostgreSQL
Databáze v PostgreSQL obsahuje informační schéma (information_schema) ve kterém jsou různé pohledy (view), ze kterých lze získat informace o objektech v databázi. View information_schema.tables obsahuje informace o všech tabulkách (tables) a pohledech (views) v aktuální databázi.
select * from information_schema.tables;
Výpis celého pohledu information_schema.tables.
select * from information_schema.tables where table_schema = 'public';
Výpis všech informací o tabulkách a pohledech ve schématu public.
select * from information_schema.tables where table_schema = 'nazev_schematu';
Výpis všech informací o tabulkách a pohledech ve schématu s názvem nazev_schematu.
select table_name from information_schema.tables where table_type = 'VIEW';
Výpis všech pohledů (názvů pohledů) v aktuální databázi.
select table_name from information_schema.tables where table_type = 'BASE TABLE';
Výpis všech tabulek (názvů tabulek) v aktuální databázi.