Sobes.tech
Junior

Koja je razlika između PreparedStatement i Statement?

sobes.tech АИ

Одговор од АИ

Statement се користи за извршавање статичних SQL упита. Он се компилира сваки пут када се изврши. PreparedStatement се користи за извршавање параметризованих SQL упита. Упит се компилира једном приликом креирања објекта PreparedStatement и може се више пута извршавати са различитим вредностима параметара.

Главне разлике:

Карактеристика Statement PreparedStatement
Перформансе Компилира се при сваком извршењу. Компилира се једном. Је ефикасније при поновном коришћењу.
Безбедност Осетљив на SQL инјекције преко конкатенације стрингова. Заштита од SQL инјекција захваљујући аутоматском екранирању параметара.
Параметри Не подржава параметризоване упите. Подржава параметризоване упите (?).
Лакше читање Мање читљиво када се ради са великим количинама података. Више читљиво када се користе параметри.

Пример коришћења Statement:

// Пример са Statement (подложан SQL инекцијама)
String user = "admin";
String pass = "' OR '1'='1"; // Пример SQL инекције
String query = "SELECT * FROM users WHERE username = '" + user + "' AND password = '" + pass + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Пример коришћења PreparedStatement:

// Пример са PreparedStatement (заштитљив од SQL инекција)
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();