求助排查MySQL语法错误:Eclipse中Java登录程序抛出[C@xxxxxx异常
解决MySQL语法错误:
[C@xxxxxxx 异常问题 嘿,这个错误我太熟悉了!你看到的[C@f8d6792这类字符串,其实是Java里char数组的默认toString()输出——后缀每次变化是因为数组的内存地址会随运行环境改变。这说明你的SQL语句里直接把char类型的变量(比如密码输入框获取的char数组)拼进去了,没有先转换成字符串,导致MySQL把这个奇怪的内存标识当成了SQL的一部分,自然就报语法错误了。
具体排查和解决步骤:
第一步:定位问题代码
先找到你拼接SQL的地方,大概率是类似这样的代码:// 假设password是从输入框获取的char[]类型 char[] password = passwordField.getPassword(); String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'";这里直接把char数组
password拼进SQL,就会产生[C@xxxxxxx这样的无效内容。第二步:将char数组转为String
把char数组通过new String(charArr)转换成字符串再拼接,修改后的代码:char[] password = passwordField.getPassword(); String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + new String(password) + "'";这样SQL里就会是正常的密码字符串,不会再出现语法错误。
第三步:更安全的写法(强烈推荐)
直接拼接SQL存在SQL注入的风险,建议使用PreparedStatement做参数化查询,既避免语法问题,又提升安全性:char[] password = passwordField.getPassword(); String sql = "SELECT * FROM users WHERE username = ? AND password = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, new String(password)); ResultSet rs = pstmt.executeQuery();
内容的提问来源于stack exchange,提问作者Steven Saxbury
相关产品推荐
相关产品推荐

