Java: získání SQL dotazu při použití třídy PrepareStatement
Java: získání SQL dotazu při použití třídy PrepareStatement
V našich projektech často využíváme databázi a stejně často člověk zabředne do složitých SQL dotazů, které obsahují několik zanořených částí.
Při vytváření SQL dotazu je lepší nechat dopl?ování proměnných na třídě PrepareStatement. Automaticky se doplní všechny apostrofy a další potřebné znaky, kterými se tyto proměnné musí obalit. Bohužel při lazení pak programátor ztrácí přehled jak přesně dotaz vypadá. Místo hodnot proměnných jsou otazníky.
Dlouho jsem hledal nějakou funkci, která by byla schopná zobrazit při naplnění proměnných přesně SQL dotaz, který bude proveden. Nakonec jsem na oracle fóru nalezl odpověd, že žádná taková funkce z principu této třídy neexistuje.
Potom jsem si všimnul, že při debugu aplikace, zobrazuje Eclipse při kliknutí na instanci třídy PrepareStatement přímo celý SQL dotaz. Proto stačí použít metodu toString() a získat tak SQL kód. Bohužel tato metoda stejně nevrací přesně SQL kód, který bude proveden. Občas chybí některé uvozovky, ale místo ručního plnění dat v SQL editoru to bohatě dostačuje.
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO table "
+ "(col1, col2, col3) VALUES (?,?,?)");
pstmt.setString(1, "test value");
pstmt.toString();
pstmt.setString(2, "test value2");
pstmt.toString();
pstmt.setString(3, "test value3");
pstmt.toString();
pstmt.executeUpdate();
pstmt.close();

