Sobes.tech
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();