首页 > 解决方案 > 在 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() 时出现的错误消息

标签: javamysqljdbc

解决方案


正如其他人已经指出的那样,您的代码中有几个问题。首先检查您的 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();


推荐阅读