Как сделать условие «если», если имя пользователя установлено в UNIQUE в БД в JavaFX?

-3

Поэтому я добавляю нового пользователя в базу данных, я сделал имя пользователя уникальным в базе данных, поэтому мне не пришлось бы писать код для его проверки. Теперь я пытаюсь использовать это сообщение об ошибке, когда пользователь вставил aleady, используемый для создания блока "if", где, если имя пользователя уже используется для отображения метки, которая говорит именно об этом, и если ее еще не используется для отображения сообщения и верните меня в меню входа в систему, но он не совсем работает для меня, не знает ли кто-нибудь, как сказать программе что-то делать, когда имя пользователя совпадает с именем в БД? Вот мой код:

package application;

import java.awt.Label;
import java.io.IOException;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ResourceBundle;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;




public class SIngupController implements Initializable {

@FXML
private Label userLbl2;

@FXML
private TextField Nume;

@FXML
private TextField Prenume;

@FXML
private TextField Email;

@FXML
private TextField Username;

@FXML
private TextField Password;









 public static Connection Connector() {
     try {
      Class.forName("org.sqlite.JDBC");
      Connection conn =DriverManager.getConnection("jdbc:sqlite:C:\\Users\\munte\\OneDrive\\Desktop\\UserDataBase\\UserDB.sqlite");

      return conn;
     } catch (Exception e) {
      System.out.println(e);
      return null;
     }
    }
public void initialize(URL location, ResourceBundle resources) {
    // TODO Auto-generated method stub
} 
@FXML 
private void adduser(ActionEvent event) throws SQLException, IOException  {

    String query= "INSERT INTO UserDB(Nume,Prenume,Email,Username,Password) VALUES(?,?,?,?,?)";

    String nume=Nume.getText();
    String prenume=Prenume.getText();
    String email=Email.getText();
    String username=Username.getText();
    String password=Password.getText();
    try {
        Connection conn = Connector();
        PreparedStatement pst = conn.prepareStatement(query);


        pst.setString(1, nume);
        pst.setString(2, prenume);
        pst.setString(3, email);
        pst.setString(4, username);
        pst.setString(5, password);

~ Это то, что я пробовал, но он не работает, он просто выполняет весь код, не заботится о другом, который я добавил. Так кто-нибудь знает, как сделать правильное условие? ~

        int i = pst.executeUpdate();
        if(i == 1)
        {
         ((Node)event.getSource()).getScene().getWindow().hide();
            Stage primaryStage= new Stage();
            FXMLLoader loader= new FXMLLoader();
            Pane root = loader.load(getClass().getResource("/application/Login.fxml").openStream());
            Scene scene = new Scene(root);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setScene(scene);
            primaryStage.show();
            System.out.println("UserAdded");
        }
        else
        {
            System.out.println("Username already in use!");
        }

    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }




}






}

Вот сообщение об ошибке, когда имя пользователя совпадает с именем в БД, это то, что я хочу использовать для создания "если", если кто-нибудь знает, как это сделать, пожалуйста, помогите брату!

org.sqlite.SQLiteException: [SQLITE_CONSTRAINT_UNIQUE]  A UNIQUE constraint failed (UNIQUE constraint failed: UserDB.Username)
at org.sqlite.core.DB.newSQLException(DB.java:909)
at org.sqlite.core.DB.newSQLException(DB.java:921)
at org.sqlite.core.DB.execute(DB.java:825)
at org.sqlite.core.DB.executeUpdate(DB.java:863)
at org.sqlite.jdbc3.JDBC3PreparedStatement.executeUpdate(JDBC3PreparedStatement.java:99)
at application.SIngupController.adduser(SIngupController.java:92)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at javafx.fxml.FXMLLoader$MethodHandler.invoke(FXMLLoader.java:1769)
at javafx.fxml.FXMLLoader$ControllerMethodEventHandler.handle(FXMLLoader.java:1657)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:86)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:49)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Node.fireEvent(Node.java:8413)
at javafx.scene.control.Button.fire(Button.java:185)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:182)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:96)
at com.sun.javafx.scene.control.skin.BehaviorSkinBase$1.handle(BehaviorSkinBase.java:89)
at com.sun.javafx.event.CompositeEventHandler$NormalEventHandlerRecord.handleBubblingEvent(CompositeEventHandler.java:218)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:80)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:238)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:191)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:59)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:58)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:56)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:114)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:74)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:54)
at javafx.event.Event.fireEvent(Event.java:198)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3757)
at javafx.scene.Scene$MouseHandler.access$1500(Scene.java:3485)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1762)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2494)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:394)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.lambda$handleMouseEvent$353(GlassViewEventHandler.java:432)
at com.sun.javafx.tk.quantum.QuantumToolkit.runWithoutRenderLock(QuantumToolkit.java:389)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:431)
at com.sun.glass.ui.View.handleMouseEvent(View.java:555)
at com.sun.glass.ui.View.notifyMouse(View.java:937)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
at java.lang.Thread.run(Unknown Source)
  • 0
    Вы, вероятно, должны сделать учебник о try / catch / excptions. Если оператор, такой как pst.executeUpdate() генерирует исключение, программа переходит к следующему окружающему блоку catch, который может pst.executeUpdate() исключение. Это означает, что ваша программа никогда не достигает if для повторяющихся имен пользователей ...
  • 0
    Так что, если я создам приватное логическое что-то, что возвращает мне истину / ложь, вопрос в том, как мне сообщить программе, когда ошибка как-то нравится? Я не знаю java, но я нахожусь под давлением времени, я работаю, чтобы я мог платить за свои вещи, это отнимает у меня много ... я постараюсь получить больше в отделе Java в будущем наверняка, но сейчас у меня есть полагаться на то, что я могу получить
Теги:
javafx

1 ответ

0
Лучший ответ

Если происходит исключение, программа пропускает весь код, пока не достигнет catch который может справиться с исключением. В этом случае вы должны добавить код для обработки повторяющихся записей в предложение catch:

try (Connection connection = Connector()) {
    ...
    pst.executeUpdate();
} catch (SQLiteException ex) {
    if (ex.getResultCode() == SQLiteErrorCode.SQLITE_CONSTRAINT_UNIQUE) {
        System.out.println("Username already in use!");
    } else {
        ex.printStackTrace(); // unexpected exception
    }
} catch (SQLException ex) {
    ex.printStackTrace(); // unexpected exception
}
  • 0
    Эй, чувак, я очень благодарен, я знаю, что то, что я делаю, не очень хороший вариант, но я решаю это, спасибо за ваше время и помощь! Действительно, это сработало.
  • 0
    Еще одна вещь, что означает ex в ex.getResultCode?
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню