Mysql java не может использовать метод подключения из другого класса - PullRequest
0 голосов
/ 20 марта 2020

В настоящее время я студент первого курса, занимаюсь разработкой программного обеспечения, и столкнулся с некоторой проблемой при разработке проекта для университета. В настоящее время я работаю над проектом netbeans, который позволяет пользователям входить в систему и получать информацию из базы данных mysql. В настоящее время у меня есть отдельный класс для обработки данных, где я написал метод подключения, см. Ниже. Однако, когда я создаю новый объект обработчика данных в своем классе Jframe и пытаюсь вызвать метод соединения, он не позволяет мне использовать операторы вставки (см. Ниже), которые я запрограммировал за кнопками (для получения информации из полей txtfields) , Однако, когда я перемещаю метод соединения в класс Jframe, он работает отлично. Мне было интересно, пропускаю ли я что-то действительно очевидное или просто ужасный дизайн.

Спасибо за вашу поддержку!

    private void connection(){
    //from data handler class

    try{

    String mysqlUrl = "jdbc:mysql://localhost/test";
    String username = "root";
    String password = "";
    con = DriverManager.getConnection(mysqlUrl, username, password);
    }
    catch(Exception e){
        System.err.println("Got an exception");
        System.err.println(e.getMessage());

    }
  }
 }

    private void btnRegisterActionPerformed(java.awt.event.ActionEvent evt) {                                            

    try{
        Datahandler test = new Datahandler();
        test.connection();

        //create my mysql database connection


        String query = "INSERT INTO User(customerStatus ,title, firstname, lastname, contactNo, email, username, password)" 
                + "VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
        pst = con.prepareStatement(query);

        pst.setString(1,"Beginner");
        pst.setString(2,cmdGender.getSelectedItem().toString());
        pst.setString(3,txtFirstname.getText());
        pst.setString(4,txtLastname.getText());
        pst.setString(5,txtPhone.getText());
        pst.setString(6,txtEmail.getText());
        pst.setString(7,txtUsername.getText());
        pst.setString(8,txtPassword.getText());
        pst.execute();

        /* inserts the values username and password into a separate table in the database and
        makes use of the to ensure that the login is sercure(I will possibly make a change to
            how the structure of the databases work since there is an security issue here
            */
            String query2 = "INSERT INTO Login(username, password)" 
                    + "VALUES (?, ?)";
            pst = con.prepareStatement(query2);
            pst.setString(1,txtUsername.getText());
            pst.setString(2,txtPassword.getText());

            pst.execute();


            JOptionPane.showMessageDialog(null, "Registration completed!");

            //reset registration boxes into empty text
            txtFirstname.setText("");
            txtLastname.setText("");
            txtPhone.setText("");
            txtEmail.setText("");
            txtUsername.setText("");
            txtPassword.setText("");

        }
        catch (Exception e){

            System.err.println("Got an exception");
            System.err.println(e.getMessage());
            JOptionPane.showMessageDialog(null, "Something went wrong try to register again");

        }
}                                           

1 Ответ

0 голосов
/ 20 марта 2020

ваш getConnection() метод ничего не возвращает. вместо этого он устанавливает для объекта подключения значение obejct con в указанном c классе.

con = DriverManager.getConnection(mysqlUrl, username, password);

Именно поэтому вы можете использовать его в своем классе Jframe , поскольку он содержит con свойство, которое устанавливается в методе getConnection(). но в вашем новом классе нет поля con , которое имеет надлежащий объект соединения.

Измените метод getConnection(), чтобы он возвращал объект соединения и использовал этот объект соединения, возвращенный этим методом для дальнейшей обработки.

...