Junior
Mi a különbség a PreparedStatement és a Statement között?
sobes.tech MI
Válasz az MI-től
A Statement statikus SQL-lekérdezések végrehajtására szolgál. Minden végrehajtáskor fordításra kerül.
A PreparedStatement paraméterezett SQL-lekérdezések végrehajtására szolgál. A lekérdezés egyszer fordításra kerül a PreparedStatement objektum létrehozásakor, és többször végrehajtható különböző paraméterértékekkel.
Fő különbségek:
| Jellemző | Statement | PreparedStatement |
|---|---|---|
| Teljesítmény | Minden végrehajtáskor fordításra kerül. | Egyszer fordításra kerül. Hatékonyabb az újrafelhasználásnál. |
| Biztonság | SQL-injekcióra hajlamos string összefűzéssel. | Automatikus paraméter escape-eléssel véd a SQL-injekciók ellen. |
| Paraméterek | Nem támogatja a paraméterezett lekérdezéseket. | Támogatja a paraméterezett lekérdezéseket (?). |
| Átláthatóság | Kevésbé olvasható sok adat esetén. | Átláthatóbb paraméterekkel. |
Példa a Statement használatára:
// SQL-injekcióra érzékeny példa
String user = "admin";
String pass = "' OR '1'='1"; // SQL-injekció példa
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Példa a PreparedStatement használatára:
// SQL-injekció elleni védelem
String user = "admin";
String pass = "' OR '1'='1";
String query = "SELECT * FROM users WHERE username = ? AND password = ?";
PreparedStatement pstmt = connection.prepareStatement(query);
pstmt.setString(1, user);
pstmt.setString(2, pass);
ResultSet rs = pstmt.executeQuery();