Prepared Statements का उपयोग

Java में PostgreSQL डेटाबेस को क्वेरी करना

Miller Trujillo

Staff Software Engineer

Statements की समस्या

String query = "SELECT * FROM books WHERE title = '" + title + "'";
stmt.executeQuery(query);
  • जब उपयोगकर्ता इनपुट सीधे SQL में जोड़ा जाता है, तो SQL injection होता है
String title = "' OR 1 = 1 --";
  • अटैकर क्वेरी की लॉजिक बदल सकते हैं
String query = "SELECT * FROM books WHERE title = '' OR 1 = 1 --'";

$$

  • SQL Injection हमारा डेटा बदल सकता है 🚫
Java में PostgreSQL डेटाबेस को क्वेरी करना

SQL Injection

String query = "SELECT * FROM books WHERE title = '" + title + "'";
stmt.executeQuery(query);
title = "'; DELETE FROM books; --"
query = "SELECT * FROM books WHERE title = ''; DELETE FROM books; -- REST of query"
  • सभी रिकॉर्ड डिलीट हो जाएँगे 🔄

$$

  • परमिशन सीमित करना मददगार है, पर पर्याप्त नहीं
  • अटैकर फिर भी संवेदनशील डेटा क्वेरी कर सकते हैं
Java में PostgreSQL डेटाबेस को क्वेरी करना

Prepared Statements

  • Placeholder वाले प्रीकम्पाइल्ड SQL स्टेटमेंट
String sql = "SELECT * FROM books WHERE title = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "Alice in Wonderland");
ResultSet rs = pstmt.executeQuery();
  • पैरामीटर escape होकर केवल डेटा की तरह ट्रीट होते हैं, executable SQL नहीं 🔒
Java में PostgreSQL डेटाबेस को क्वेरी करना

Multiple parameters के साथ काम

String sql = "SELECT * FROM books WHERE title = ? AND publication_year = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);

pstmt.setString(1, "Alice in Wonderland"); pstmt.setInt(2, 1998);
ResultSet rs = pstmt.executeQuery();
  • हर डेटा टाइप का अपना setter मेथड होता है
Java में PostgreSQL डेटाबेस को क्वेरी करना

अभ्यास करते हैं!

Java में PostgreSQL डेटाबेस को क्वेरी करना

Preparing Video For Download...