Java Derby数据库连接认证失败:用户ID或密码无效求助
Java Derby连接认证失败:用户ID或密码无效的解决办法
核心错误信息
你遇到的错误是:
java.sql.SQLNonTransientConnectionException: Connection could not be authenticated. Reason: User ID or password invalid
对应的德语提示也明确指出用户ID或密码无效,说明问题出在数据库凭据的匹配上。
排查与解决步骤
1. 核对Derby数据库的实际用户凭据
不要直接照搬教程里的用户名密码,先确认你创建SuperMarketdb时设置的真实凭据:
- 如果是用IDE(比如NetBeans)创建的数据库:打开IDE的「服务」面板,找到
Databases -> Java DB -> SuperMarketdb,右键选择「属性」,查看其中的用户名和密码。 - 如果是手动用Derby的ij工具创建的数据库,回忆创建时的命令,比如:
确保代码里的凭据和这里完全一致。connect 'jdbc:derby://localhost:1527/SuperMarketdb;user=你的用户名;password=你的密码;create=true';
2. 检查代码中的拼写与大小写
Derby的用户名和密码区分大小写,仔细核对代码中的:
DriverManager.getConnection("jdbc:derby://localhost:1527/SuperMarketdb","User1","1234");
- 确认
User1的大小写和数据库用户一致(比如数据库里是user1小写,代码里大写就会失败) - 检查密码
1234有没有多余空格、拼写错误
3. 用ij工具测试连接
打开Derby的ij命令行工具,执行以下命令测试连接:
connect 'jdbc:derby://localhost:1527/SuperMarketdb;user=User1;password=1234';
- 如果命令报错,说明确实是凭据问题,回到第一步确认正确的用户名密码;
- 如果命令能成功连接,再检查代码中是否有其他隐藏问题(比如字符串转义、特殊字符)。
4. 确认用户权限
确保User1用户拥有连接数据库和操作SELLERTBL表的权限,执行以下SQL赋予权限(需要用管理员用户连接后执行):
GRANT CONNECT, INSERT, SELECT ON SELLERTBL TO User1;
5. 代码优化建议
你的代码每次点击按钮都创建新连接,且未关闭资源,容易导致泄漏,建议修改为:
private void AddBtnMouseClicked(java.awt.event.MouseEvent evt) { if(SellId.getText().isEmpty() || SellName.getText().isEmpty() || SellPas.getText().isEmpty() ) { JOptionPane.showMessageDialog(this, "缺少必要信息"); } else { Connection con = null; PreparedStatement add = null; try{ con = DriverManager.getConnection("jdbc:derby://localhost:1527/SuperMarketdb","User1","1234"); add = con.prepareStatement("insert into SELLERTBL values(?,?,?,?)"); add.setInt(1, Integer.valueOf(SellId.getText())); add.setString(2, SellName.getText()); add.setString(3, SellPas.getText()); add.setString(4, GenderCb.getSelectedItem().toString()); int row = add.executeUpdate(); JOptionPane.showMessageDialog(this, "卖家添加成功!"); } catch(SQLException e) { JOptionPane.showMessageDialog(this, "错误:" + e.getMessage()); e.printStackTrace(); } finally { // 关闭资源,避免泄漏 try { if(add != null) add.close(); if(con != null) con.close(); } catch(SQLException e) { e.printStackTrace(); } } } }
内容的提问来源于stack exchange,提问作者SpicyP
相关产品推荐
相关产品推荐

