JDBC-এ MySQL-এ ডেটা ইনসার্ট করার সময় ব্যাকস্ল্যাশ (\) সঠিকভাবে হ্যান্ডল করতে PreparedStatement ব্যবহার করা সেরা অনুশীলন। এটি SQL ইনজেকশন প্রতিরোধ করতেও সাহায্য করে।
টেবিল তৈরি
mysql> CREATE TABLE DemoTable1904 (
ClientId INT,
ClientName VARCHAR(20),
ClientAge INT
);
Java কোড: PreparedStatement ব্যবহার
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class EscapeBackslashesDemo {
public static void main(String[] args) {
Connection con = null;
PreparedStatement ps = null;
try {
// ডাটাবেস সংযোগ
con = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/web?useSSL=false",
"root", "123456"
);
// প্যারামিটারাইজড কোয়েরি
String query = "INSERT INTO DemoTable1904(ClientId, ClientName, ClientAge) VALUES (?, ?, ?)";
ps = con.prepareStatement(query);
// মান সেট করা (ব্যাকস্ল্যাশ সহ স্ট্রিংও সুরক্ষিতভাবে যাবে)
ps.setInt(1, 1001);
ps.setString(2, "David Miller"); // এখানে ব্যাকস্ল্যাশ থাকলে JDBC স্বয়ংক্রিয় ইস্কেপ করবে
ps.setInt(3, 35);
ps.executeUpdate();
System.out.println("One row is inserted.....");
} catch (Exception e) {
e.printStackTrace();
} finally {
// রিসোর্স বন্ধ করা ভালো অভ্যাস
try { if (ps != null) ps.close(); } catch (Exception ignored) {}
try { if (con != null) con.close(); } catch (Exception ignored) {}
}
}
}
ফলাফল যাচাই
mysql> SELECT * FROM DemoTable1904;
আউটপুট:
+----------+--------------+-----------+ | ClientId | ClientName | ClientAge | +----------+--------------+-----------+ | 1001 | David Miller | 35 | +----------+--------------+-----------+ 1 row in set (0.00 sec)
কেন PreparedStatement?
- ব্যাকস্ল্যাশ, কোটেশন, спеসিয়াল ক্যারেক্টার স্বয়ংক্রিয়ভাবে ইস্কেপ হয়।
- SQL ইনজেকশন আক্রমণ থেকে রক্ষা পায়।
- কোয়েরি প্ল্যান ক্যাশে থাকে, পারফরম্যান্স বাড়ে।
নোট
যদি কখনো ম্যানুয়ালি স্ট্রিং তৈরি করতে হয়, তবে connection.escapeString() বা StringEscapeUtils ব্যবহার করুন, কিন্তু PreparedStatement সর্বোত্তম।