SQL语法错误排查:含JDBC连接代码的MySQL关联查询问题
排查MySQL关联查询的语法错误
先看你的错误提示“在‘??_id’附近使用的正确语法”,这其实是个很典型的问题——要么列名里藏了看不见的特殊字符,要么拼写出了问题,结合你的代码来看,两个问题都有:
1. 藏在列名里的“隐形坑”
你JOIN条件里的Queue_Reserved.pastient_id,仔细看的话patient后面有两个不可见的Unicode特殊字符(大概率是复制粘贴时带进来的零宽空格),MySQL读不懂这个列名,就会把它显示成乱码的??_id,这直接导致语法报错。
2. 拼写错误
你把“病人”的正确拼写patient写成了pastient,多处都有这个问题:
Patients.pastient_name→ 应该是Patients.patient_namePatients.pastient_id→ 应该是Patients.patient_id- 别名
'Pastient name'→ 改成'Patient name'更准确
3. 未完成的WHERE子句
你的代码里WHERE Queue_...是半截的,SQL语句不完整,必须补全过滤条件才能正常执行。
修正后的完整代码示例
String url = "jdbc:mysql://localhost:3306/mithalim"; String username = "root"; String password = "1234"; try (Connection connection = DriverManager.getConnection(url, username, password)) { java.sql.Statement st = connection.createStatement(); System.out.println("Database connected!"); // 修正了拼写、移除了特殊字符、补全了WHERE子句(你可以换成自己的实际条件) String query = "SELECT Patients.patient_name as 'Patient name', Queue_Reserved.queue_time AS Time " + "FROM Patients " + "JOIN Queue_Reserved ON Patients.patient_id = Queue_Reserved.patient_id " + "WHERE Queue_Reserved.queue_time >= '2024-01-01'"; // 这里可以添加执行查询的代码,比如ResultSet rs = st.executeQuery(query); } catch (SQLException e) { e.printStackTrace(); }
额外验证建议
- 先在MySQL客户端(比如Workbench、Navicat)里跑一遍修正后的SQL,确认能正常返回结果,再复制到Java代码里,避免再次引入特殊字符。
- 检查你的数据库表结构,确保
Patients和Queue_Reserved表确实存在patient_id列,列名拼写完全一致。
内容的提问来源于stack exchange,提问作者Dor Levi
相关产品推荐
相关产品推荐

