JDBC отчети, EasyJava
Java по пример за начинаещи
JDBC интерфейсът е фокусиран върху работата с декларативни текстови заявки (с други думи, с sql заявки). Но при вече установена връзка с базата данни е невъзможно да се изпрати заявка директно. Първо, трябва да получите обекта на заявката от връзката и да работите с него.Обектът на заявката се получава чрез просто достъп до обекта за връзка:
Интерфейсът Statement има три основни метода: executeQuery ( ), executeUpdate ( ) и execute ( ) . Първият метод е фокусиран върху заявки, които връщат данни (заявки за избор) и връща обект с данни (набор от резултати). Вторият метод, executeUpdate (), се използва за изпълнение на заявки, които не връщат данни, като вмъкване или актуализиране. Този метод връща броя на редовете, засегнати от заявката. Последният метод, execute (), е подходящ за всички типове заявки и показва по своята стойност дали заявката е върнала данни или не: true, ако заявката е върнала данни, и false в противен случай. В първия случай обектът Statement може да бъде заявен за получения ResultSet чрез извикване на метода getResultSet().
Един екземпляр на Statement може да се използва многократно и могат да се правят множество заявки, като се използва един и същ обект. Има точно едно условие - тъй като обектът ResultSet е твърдо свързан към Statement, който го е породил, тогава всяка следваща заявка затваря предишния създаден ResultSet и, ако е необходимо, създава нов ResultSet. По този начин, ако искате да работите с множество ResultSets едновременно, трябва да имате и множество изрази.
PreparedStatement
Основният недостатък на интерфейса Statement бих нарекъл необходимостта цялата заявка да се предава като низ, с параметри и данни. Първо, това води до тромави конструкции като "INSERT INTOORDER_ITEMS (CLIENT_ID, ORDER_ID, ITEM_ID) стойности (1, 1, " + i + ")" . Второ, при формирането на такава заявка е много лесно да се направят грешки, особено ако е сглобена от няколко реда и е пет пъти по-дълга от моя пример. Трето, това е директен път към sql инжектиране, което в 21-ви век е точната дума нелепо.
За да реши тези проблеми, JDBC предоставя интерфейса PreparedStatement, който разширява Statement. Той също така се създава от обекта за връзка и когато го създавате, трябва незабавно да изпратите заявка. Тази заявка може (и най-вероятно ще) съдържа параметри, които са неизвестни по време на създаването на заявката и ще бъдат зададени по-късно.
Използването на PreparedStatement ви позволява да убиете малко ято птици с един камък: заявката се компилира и оптимизира веднъж от страната на базата данни; параметрите се предават безопасно и не могат да причинят sql инжектиране; кодът става по-четлив и заявката е по-лесна за повторно използване: