Не удается подключить приложение javafx к базе данных mysql - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь подключить свое приложение javafx к базе данных mysql. Есть кнопка с названием сохранить,

который,

аналогичным образом сохраняет название, ISBN, автора и издателя в базе данных.

Mysql версия коннектора - 2.0. 14

    @FXML
private void savebutton(ActionEvent event) {
    try {
        String url = "jdbc:mysql://localhost:3306/librarymanager";
        String uname="root";
        String pass="";
        String query="INSERT INTO `bookdetails`(`title`, `isbn`, `author`, `publisher`, `isavailable`) VALUES ("+title.getText()+","+isbn.getText()+","+author.getText()+","+publisher.getText()+","+Boolean.TRUE+")";
        Class.forName("org.gjt.mm.mysql.Driver");
        Connection con=DriverManager.getConnection(url, uname, pass);
        Statement st=con.createStatement();
        st.executeUpdate(query);
        st.close();
        con.close();
    } catch (ClassNotFoundException |SQLException ex) {
       System.out.println(ex);
    }
}

Это функция, которая вызывается при нажатии кнопки сохранения.

полный класс контроллера ...

publi c класс FXMLDocumentController реализует Initializable {

private Label label;
@FXML
private JFXButton save;
@FXML
private JFXButton cancel;
@FXML
private JFXTextField title;
@FXML
private JFXTextField isbn;
@FXML
private JFXTextField author;
@FXML
private JFXTextField publisher;



@Override
public void initialize(URL url, ResourceBundle rb) {
   
    RequiredFieldValidator fortitle=new RequiredFieldValidator();
    RequiredFieldValidator forisbn=new RequiredFieldValidator();
    title.getValidators().add(fortitle);
    title.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
        if(!newValue){
            fortitle.setMessage("Enter the title");
            title.validate();
        }
    });
    isbn.getValidators().add(forisbn);
    isbn.focusedProperty().addListener((ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
        if(!newValue){
            forisbn.setMessage("Enter ISBN");
            isbn.validate();
        }
    });
}    

@FXML
private void savebutton(ActionEvent event) {
    try {
        String url = "jdbc:mysql://localhost:3306/librarymanager";
        String uname="root";
        String pass="";
        String query="INSERT INTO `bookdetails`(`title`, `isbn`, `author`, `publisher`, `isavailable`) VALUES ("+title.getText()+","+isbn.getText()+","+author.getText()+","+publisher.getText()+","+Boolean.TRUE+")";
        Class.forName("org.gjt.mm.mysql.Driver");
        Connection con=DriverManager.getConnection(url, uname, pass);
        Statement st=con.createStatement();
        st.executeUpdate(query);
        st.close();
        con.close();
    } catch (ClassNotFoundException |SQLException ex) {
       System.out.println(ex);
    }
}

@FXML
private void cancelbutton(ActionEvent event) {
       Button btn=(Button)event.getSource();
       Stage stage =(Stage)btn.getScene().getWindow();
       stage.close();
}

Ошибка IDE Netbeans - Не удается подключиться к серверу MySQL на локальном хосте: 3306. Есть ли сервер MySQL, работающий на машине / порте, к которому вы пытаетесь подключиться? (java .lang.NumberFormatException). Я знаю, что эта ошибка уже задавалась ранее, но я не делал ошибки как этот код. Я запускаю сервер с xaamp, он запустился без проблем. Я могу открыть localhost: 8080 / phpmyadmin / в моем браузере.

Я не могу указать на возможную проблему, не могли бы вы мне помочь?

1 Ответ

0 голосов
/ 06 августа 2020

Просто запрос был неправильным.

Вместо

String query="INSERT INTO `bookdetails`(`title`, `isbn`, `author`, `publisher`, `isavailable`) VALUES ("+title.getText()+","+isbn.getText()+","+author.getText()+","+publisher.getText()+","+Boolean.TRUE+")";

я использовал

 String query="insert into bookdetails values (?, ?, ?, ?, ?)";
 PreparedStatement st=con.prepareStatement(query);
                st.setString(1, title.getText());
                st.setString(2, isbn.getText());
                st.setString(3, author.getText());
                st.setString(4, publisher.getText());
                st.setBoolean(5, true);
                st.executeUpdate();
                st.close();

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

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