Dalam JDBC, kelas PreparedStatement menyediakan cara untuk melaksanakan pertanyaan SQL dengan nilai dinamik. Walau bagaimanapun, terdapat had apabila menggunakan nama lajur sebagai parameter input.
Adakah mungkin untuk menghantar nama lajur sebagai parameter input PreparedStatement?
Tidak, JDBC tidak membenarkan menetapkan nama lajur sebagai parameter input untuk PreparedStatements. PreparedStatements direka bentuk untuk menerima hanya nilai, bukan metadata seperti nama lajur.
Pertimbangkan contoh berikut:
Jadual:
Pertanyaan:
PILIH * DARI A, B DI MANA "A"."X" = ?
Cuba untuk menggunakan Nama Lajur sebagai Parameter:
PreparedStatement statement = connection.prepareStatement("SELECT * FROM A, B WHERE \"A\".\"X\" = ?"); statement.setString(1, "B"."Y"); // Attempting to set column name as parameter ResultSet resultSet = statement.executeQuery(); // Returns empty result set
Pertanyaan SQL menjangkakan nilai literal untuk penapis klausa WHERE, bukan nama lajur. Melepasi nama lajur sebagai parameter akan menghasilkan set hasil kosong kerana tidak akan ada rekod yang sepadan.
Untuk mencapai perubahan dinamik pada pernyataan SQL, adalah perlu untuk mengubah suai rentetan pertanyaan sebelum membuat PreparedStatement. Sebagai contoh:
String query = "SELECT * FROM A, B WHERE " + columnName + " = ?"; PreparedStatement statement = connection.prepareStatement(query); statement.setString(1, value); // Setting value for input parameter ResultSet resultSet = statement.executeQuery(); // Returns non-empty result set
Dalam kes ini, pembolehubah columnName ditetapkan secara dinamik dengan nama lajur yang dikehendaki. Pendekatan ini membolehkan fleksibiliti yang lebih besar dalam membina pertanyaan SQL tanpa melanggar had JDBC.
Atas ialah kandungan terperinci Bolehkah JDBC PreparedStatement Mengendalikan Nama Lajur Dinamik sebagai Parameter Input?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!