Bolehkah nama jadual ditetapkan secara dinamik dalam pertanyaan INSERT Java PreparedStatement?
Apabila membuat pertanyaan INSERT pukal menggunakan Java PreparedStatement, anda mungkin perlu memasukkan data ke dalam jadual berbeza dengan format lajur yang sama. Pernyataan pertanyaan memerlukan kedua-dua nilai medan dan nama jadual sebagai pembolehubah.
Walau bagaimanapun, PreparedStatement hanya membenarkan anda menetapkan parameter untuk nilai lajur, bukan nama jadual. Nama jadual pengekodan keras mengalahkan tujuan menggunakan pernyataan yang disediakan.
Penyelesaian
Malangnya, tidak mungkin menggunakan pembolehubah dinamik sebagai nama jadual dalam kes ini. PreparedStatement direka untuk menghalang suntikan SQL dengan hanya membenarkan anda menentukan nilai yang akan dimasukkan ke dalam pangkalan data. Nama jadual ialah elemen struktur pertanyaan dan oleh itu tidak boleh ditetapkan secara dinamik.
Anda perlu membina pernyataan SQL secara dinamik menggunakan penggabungan rentetan atau ruang letak (seperti String.format). Berikut ialah contoh menggunakan penggabungan rentetan:
<code class="language-java">String tableName = "tableName1"; String strQuery = "INSERT INTO " + tableName + " (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?);";</code>
Ini akan mencipta strQuery baharu yang mengandungi nama jadual tertentu yang dimasukkan ke dalam pernyataan. Anda kemudiannya boleh menggunakan strQuery yang diubah suai ini untuk mencipta PreparedStatement dan menetapkan nilai lajur mengikut kesesuaian.
Sila ambil perhatian bahawa walaupun pendekatan ini mengelakkan risiko suntikan SQL menggunakan nama jadual dinamik, ia mengorbankan prestasi dan faedah kebolehbacaan PreparedStatement. Dalam aplikasi praktikal, kebaikan dan keburukan perlu ditimbang mengikut keadaan tertentu. Jika bilangan nama jadual adalah terhad, mungkin lebih cekap untuk mempertimbangkan menggunakan berbilang pernyataan yang disediakan.
Atas ialah kandungan terperinci Bolehkah Nama Jadual Ditetapkan Secara Dinamik dalam Java PreparedStatement INSERT Queries?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!