Java(Ant)应用连接MySQL成功但无法读取数据求助
MySQL登录验证失败排查方案
以下是针对你遇到的登录验证始终进入else分支问题的排查方向和解决方法:
1. 数据库库名与查询语句中的库名不匹配
你的数据库连接URL指定的是rgi_student库:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/rgi_student", "root", "");
但查询语句中却使用了richfield.members,指定了另一个库的表:
String sqlquery = "SELECT * FROM richfield.members Where username = ? AND password = ?";
这会导致查询的表不在当前连接的库中,自然查不到数据。
解决方法:
修改SQL语句,要么去掉库名前缀(确保members表在rgi_student库中):
String sqlquery = "SELECT * FROM members Where username = ? AND password = ?";
要么确保连接的库是richfield,修改URL:
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/richfield", "root", "");
2. 输入内容包含前后空格
直接从文本框获取的user和pass可能包含用户输入时不小心添加的前后空格,或者文本框默认的空格,导致与数据库中存储的"Dox"不匹配。
解决方法:
对获取的字符串进行去空格处理:
String user = userTxtF.getText().trim(); String pass = passwordTxtF.getText().trim();
3. 字符串大小写匹配问题
需要确认:
- 数据库中存储的
username和password值确实是精确的"Dox"(包括大小写) - 用户在文本框中输入的内容与数据库值完全一致(比如不要输入成"dox"或"DOX")
如果需要忽略大小写匹配,可以修改SQL语句:
String sqlquery = "SELECT * FROM members Where LOWER(username) = LOWER(?) AND LOWER(password) = LOWER(?)";
4. 资源未关闭的潜在问题(建议修复)
当前代码中Connection、PreparedStatement、ResultSet都没有关闭,长期运行可能导致数据库连接泄漏,建议在finally块中关闭资源:
finally { try { if (rs != null) rs.close(); if (pst != null) pst.close(); if (con != null) con.close(); } catch (SQLException ex) { ex.printStackTrace(); } }
内容的提问来源于stack exchange,提问作者Dox
相关产品推荐
相关产品推荐

