java - 在 NetBeans 中将 MySQL Workbench 数据库连接到 Java 应用程序
问题描述
我正在尝试在 NetBeans 的 Java 应用程序中连接 MySQL 数据库,该应用程序目前只有 1 个用户名和密码条目。每当我在 MySQL Workbench 中执行 SQL 语句时,都会拉回正确的信息。
我将其作为 NetBeans 中的当前代码,用于将数据库连接到我创建的登录页面:
String userName = inputUsernameTextFrontPage.getText();
String password = inputPasswordTextFrontPage.getText();
try{
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","Password23");
String sql = "SELECT username,password FROM adminlogin WHERE username =? AND password =? AND ID =?";
PreparedStatement preparedStatement = conn.prepareStatement(sql);
preparedStatement.setString(1, userName);
preparedStatement.setString(2, password);
preparedStatement.setLong (3, 1);
ResultSet result = preparedStatement.executeQuery();
if(result.next()){
setVisible(false);
new adminLogin().setVisible(true);
}
else{
JOptionPane.showMessageDialog(null, "Incorrect Login Details");
}
}
catch(Exception e){
JOptionPane.showMessageDialog(null, e.getStackTrace());
}
抱歉,我是新手,任何人都可以看到任何问题,因为数据库在 NetBeans 中已成功连接。每次我运行程序时,它都会直接跳转到捕获部分并带回“连接错误”。
任何帮助将非常感激。如果您需要任何进一步的信息,请告诉我,因为我不确定这对其他人是否有意义。
添加 e.getStackTrace() 时收到的 错误消息是使用 e.getStackTrace() 时出现的错误消息
解决方案
正如其他人已经指出的那样,您的代码中有几个问题。首先检查您的 sql 连接器版本,如果它是版本 5,然后避免在 .Change 中使用 .cj前缀,将classForName()
其更改为 Class.forName("com.mysql.jdbc.Driver");
然后请使用 PreparedStatements 而不是 createStatements 来传递具有可变参数的查询。
附加:Java中命名变量时请使用驼峰式大小写。例如:用户名必须是用户名
使用 PreparedStatement 而不是 createStatement 后的示例解决方案。
String username = inputUsernameTextFrontPage.getText();
String password = inputPasswordTextFrontPage.getText();
String sql = "SELECT username,password FROM adminlogin WHERE username =? AND password =? AND ID =?";
PreparedStatement preparedStatement =
connection.prepareStatement(sql);
preparedStatement.setString(1, username);
preparedStatement.setString(2, password);
preparedStatement.setLong (3, 1);
ResultSet result = preparedStatement.executeQuery();
推荐阅读
- typescript - 为什么在预期字符串时传递数字不会导致编译失败
- python - 我该如何为“手指战争”写一些 AI
- authentication - url 密码中的数字符号 (#)
- laravel - Laravel 应用程序 .env 文件参数到 GCloud App Engine 的 app.yaml 和根路径
- asp.net-core - 允许无范围的隐式 OAuth - IdentityServer4
- bezier - 将大量点逼近到贝塞尔曲线
- http - 如何在 GET 请求 golang 中发送 JSON 正文?
- angular - 已跳过订阅结果
- php - 在xml php中添加前缀字符串所有标签
- sql - 计数日期出现在第二个表中的两个日期之间