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
Lepaskan: 2024-12-06 19:24:12
asal
814 orang telah melayarinya

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);
Salin selepas log masuk

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";
Salin selepas log masuk

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

s.setString("member_id", "2");
s.setString("member_name", "zen");
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan