Junior
Ի՞նչ է PreparedStatement և Statement-ի տարբերությունը։
sobes.tech AI
Պատասխան AI-ից
Statement օգտագործվում է ստատիկ SQL հարցումների կատարելու համար: Այն compile է յուրաքանչյուր կատարումից առաջ:
PreparedStatement օգտագործվում է պարամետրավորված SQL հարցումների համար: Հարցումը compile է մեկ անգամ, երբ ստեղծվում է PreparedStatement օբյեկտը, և կարող է կրկնակի օգտագործվել տարբեր պարամետրերով:
Հիմնական տարբերությունները՝
| Գծագիր | Statement | PreparedStatement |
|---|---|---|
| Արդյունավետություն | Compile է յուրաքանչյուր կատարումից առաջ | Compile է մեկ անգամ, ավելի արդյունավետ է կրկնակի օգտագործման դեպքում |
| Անվտանգություն | Զգայուն է SQL injection-ներին, string-ների միացման միջոցով | Պաշտպանում է SQL injection-ներից ավտոմատ պարամետրերի escape-ով |
| Պարամետրեր | Չի աջակցում պարամետրավորված հարցումներին | Աջակցում է պարամետրավորված հարցումներին (?) |
| Կարդալություն | Ավելի քիչ կարդացվող մեծ տվյալների դեպքում | Ավելի կարդացվող պարամետրերով |
Օրինակ՝ Statement օգտագործելու:
// Զգայուն SQL injection-ներին օրինակ
String user = "admin";
String pass = "' OR '1'='1"; // SQL injection օրինակ
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);
Օրինակ՝ PreparedStatement օգտագործելու:
// Պաշտպանված SQL injection-ներից
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();