You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助排查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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:37:09