Rumah >Java >javaTutorial >Mengapa Penyata Disediakan Saya Menghasilkan Pengecualian 'Anda Mempunyai Ralat dalam Sintaks SQL Anda' dalam MySQL?

Mengapa Penyata Disediakan Saya Menghasilkan Pengecualian 'Anda Mempunyai Ralat dalam Sintaks SQL Anda' dalam MySQL?

Linda Hamilton
Linda Hamiltonasal
2024-12-06 19:24:12869semak imbas

Why Does My PreparedStatement Result in a

Anda mempunyai Ralat dalam Sintaks SQL anda semasa Menggunakan PreparedStatement

Masalah:

Apabila melaksanakan pertanyaan menggunakan PreparedStatement dalam Java, MySQLSyntaxErrorException berlaku dengan mesej ralat: "Anda mempunyai ralat dalam sintaks SQL anda... berhampiran '? atau MemberName = ?'."

Kod:

String query = "select MemberID, MemberName from members where MemberID = ? or MemberName = ?";
Connection conn = DriverManager.getConnection(DATABASE_URL, USERNAME, PASSWORD);
PreparedStatement s = conn.prepareStatement(query);
s.setInt(1, 2);
s.setString(2, "zen");
ResultSet rs = s.executeQuery(query);

Punca:

Ralat sintaks disebabkan oleh tanda soal (?) dalam pertanyaan SQL. MySQL mentafsirkannya sebagai tanda soal literal, bukan sebagai pemegang tempat parameter. Ini mengakibatkan sintaks SQL tidak sah.

Penyelesaian:

Untuk menyelesaikan isu, gantikan tanda soal dalam pertanyaan SQL dengan parameter bernama. Ini akan membolehkan PreparedStatement mengikat nilai parameter dengan betul:

String query = "select MemberID, MemberName from members where MemberID = :member_id or MemberName = :member_name";

Dalam kod Java, gunakan kaedah PreparedStatement#setString untuk menetapkan parameter yang dinamakan:

s.setString("member_id", "2");
s.setString("member_name", "zen");

Sebagai alternatif, anda boleh menggunakan kaedah s.executeQuery() tanpa argumentasi dan bukannya s.executeQuery(query) untuk mengelakkan mengatasi yang disediakan pertanyaan dengan pertanyaan asal.

Kebocoran Sumber:

Perhatikan bahawa kod yang disediakan mempunyai isu kebocoran sumber. Objek Sambungan, Pernyataan dan ResultSet harus ditutup dalam blok akhirnya untuk mengelakkan keletihan sumber.

Atas ialah kandungan terperinci Mengapa Penyata Disediakan Saya Menghasilkan Pengecualian 'Anda Mempunyai Ralat dalam Sintaks SQL Anda' dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn