Я пытаюсь вставить данные в MySQL через JFrame - PullRequest
0 голосов
/ 12 марта 2019

Я пытался вставить данные в JFrame регистрационную форму, используя базу данных MySQL за прошедший день.Но все, что я получаю, это ошибки, которые я не знаю.Здесь мой код SQL и ошибки, которые отображаются.

Может кто-нибудь помочь мне исправить эту ошибку?

 JButton btnNewButton = new JButton("Sign Up");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            String url = "jdbc:mysql://localhost:3306/login";
            String user ="root";
            String password ="toor";

            try {
                Class.forName("com.mysql.cj.jdbc.Driver");
                Connection conn = DriverManager.getConnection(url, user, password);
                Statement state = conn.createStatement();
                  String username = textField.getText();
                  String email=textField_1.getText();
                  String password1 = new String(passwordField.getPassword());
                  String password2 = new String(passwordField_1.getPassword());


                String insertTableSQL = "INSERT INTO signup"+"(username,email,password,confirm) VALUES"+"(?,?,?,?)";
                PreparedStatement create = conn.prepareStatement(insertTableSQL);

                create.setString(1, username);
                create.setString(2, email);
                create.setString(3, password);
                create.setString(4, password);
                create.executeUpdate(insertTableSQL);

                state.executeQuery(insertTableSQL);


            }catch(Exception arg0) {arg0.printStackTrace();
            System.out.println("Success");
        ;}
    }});

Трассировка стека

 Success
java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?,?,?,?)' at line 1
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
    at com.mysql.cj.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1355)
    at com.mysql.cj.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2128)
    at com.mysql.cj.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1264)
    at SignUp$5.actionPerformed(SignUp.java:144)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

1 Ответ

1 голос
/ 12 марта 2019
insertTableSQL = "INSERT INTO signup"+"(username,email,password,confirm) VALUES"+"(?,?,?,?)";

Смысл использования PreparedStatement заключается в том, что вы можете просто использовать простую строку с SQL, а затем заменить токены действительными параметрами.

В приведенном выше SQL-коде вы используете конкатенацию строк, котораяненужным.Просто используйте:

insertTableSQL = "INSERT INTO signup(username,email,password,confirm) VALUES(?,?,?,?)";

, что упрощает чтение и снижает вероятность ошибок при вводе при добавлении всех разделителей.

Однако я сомневаюсь, что это проблема.

Вместо этого я вижу:

String password1 = new String(passwordField.getPassword());
String password2 = new String(passwordField_1.getPassword());

Однако затем вы используете:

create.setString(3, password);
create.setString(4, password);

для замены токенов.Я бы предположил, что «пароль» является нулем?

Может быть, вы должны использовать «пароль1» и «пароль2»?

Редактировать:

У вас есть пара проблем.Взгляните на свой код:

Statement state = conn.createStatement();
String insertTableSQL = "INSERT INTO signup(username,email,password,confirm) VALUES(?,?,?,?)";
PreparedStatement create = conn.prepareStatement(insertTableSQL);

...

create.executeUpdate(insertTableSQL);
state.executeQuery(insertTableSQL);
  1. Вы создаете два оператора
  2. Вы пытаетесь выполнить команду SQL "вставка" в качестве запроса.

Решение состоит в том, чтобы:

  1. избавиться от Statement.
  2. избавиться от executeQuery.

Если вы хотите выполнить запроспосле вставки необходимо создать отдельный запрос SQL с помощью оператора «Выбрать».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...