Junior
Mis vahe on PreparedStatement ja Statement vahel?
sobes.tech AI
Vastus AI-lt
Statement kasutatakse staatiliste SQL-küsimuste täitmiseks. See kompileeritakse iga kord täitmisel.
PreparedStatement kasutatakse parameetritud SQL-küsimuste täitmiseks. Küsimus kompileeritakse üks kord, kui luuakse PreparedStatement objekt, ning seda saab täita mitu korda erinevate parameetrite väärtustega.
Peamised erinevused:
| Omadus | Statement | PreparedStatement |
|---|---|---|
| Tõhusus | Kompileeritakse iga täitmise ajal. | Kompileeritakse üks kord. Korduvkasutamisel tõhusam. |
| Turvalisus | On haavatav SQL-injektsioonidele stringide ühendamise tõttu. | Kaitseb SQL-injektsioonide eest automaatselt parameetreid käsitledes. |
| Parameetrid | Ei toeta parameetritud päringuid. | Toetab parameetritud päringuid (?). |
| Lugemise lihtsus | Vähem loetav suure andmemahtude töötamisel. | Kergem lugeda parameetritega töötades. |
Statement näide:
// Statement näide (haavatav SQL-injektsioonidele)
String user = "admin";
String pass = "' OR '1'='1"; // SQL-injektsiooni näide
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
PreparedStatement näide:
// PreparedStatement näide (kaitstud SQL-injektsioonide eest)
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();