ошибка при запуске моего приложения javaf xml с базой данных Derby - PullRequest
1 голос
/ 31 января 2020

Я новичок в Java. Я пишу приложение JavaF XML в Netbeans IDE 8.2, которое включает в себя класс для подключения к базе данных Derby (DatabaseHandler. java), который сначала создает базу данных для меня. Но когда я запускаю программу, эта база данных не создается в моем проекте. Требуется ли какой-либо код для добавления или изменения? Вот мои коды. Пожалуйста, помогите мне.

В моей программе 2 пакета: -library.assistant.database -library.assistant.ui.addbook

Коды для FXMLDocumentCntroller. java

package library.assistant.ui.addbook;
import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXTextField;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import library.assistant.database.DatabaseHandler;

/**
 * FXML Controller class
 *
 * @author pc
 */
public class FXMLDocumentController implements Initializable {

@FXML
private JFXTextField title;
@FXML
private JFXTextField id;
@FXML
private JFXTextField author;
@FXML
private JFXTextField publisher;
@FXML
private JFXButton saveButton;
@FXML
private JFXButton cancelButton;

DatabaseHandler databaseHandler;

/**
 * Initializes the controller class.
 */
@Override
public void initialize(URL url, ResourceBundle rb) {

    databaseHandler = new DatabaseHandler();
}

@FXML
private void addBook(ActionEvent event) {
}

@FXML
private void cancel(ActionEvent event) {
}

}


Коды для DatabaseHandler. java


package library.assistant.database;
private static DatabaseHandler handler;

private static final String DB_URL = "jdbc:derby:database;create=true";
private static Connection conn = null;
private static Statement stmt = null;

public DatabaseHandler() {

    createConnection();
    setupBookTable();
}

void createConnection() {

    try {

        Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
        conn = DriverManager.getConnection(DB_URL);

    } catch (Exception e) {
        e.printStackTrace();
    }
}

void setupBookTable() {

    String Table_Name = "Book";
    try {

        stmt = conn.createStatement();
        DatabaseMetaData dbm = conn.getMetaData();
        ResultSet tables = dbm.getTables(null, null, Table_Name.toUpperCase(), null);
        if (tables.next()) {
            System.out.println("table" + Table_Name + "already exists. Ready for go!");

        } else {

            stmt.execute("CREATE TABLE " + Table_Name + "("
                    + "    id varchar(200) primary key,\n"
                    + "    title varchar(200),\n"
                    + "    author varchar(200),\n"
                    + "    publisher varchar(100),\n"
                    + "    isAvailable boolaen default true"
                    + " )");
        }

    } catch (SQLException e) {
        System.err.println(e.getMessage() + " ... setupDatabase");
    } finally {

    }

}

}

Коды для LibraryAssistant. java


package library.assistant.ui.addbook;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

/**
 *
 * @author pc
 */
public class LibraryAssistant extends Application {

@Override
public void start(Stage stage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("FXMLDocument.fxml"));

    Scene scene = new Scene(root);

    stage.setScene(scene);
    stage.show();
}

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    launch(args);
}

}


Вот мой файл f xml

 <?xml version="1.0" encoding="UTF-8"?>

 <?import com.jfoenix.controls.JFXButton?>
 <?import com.jfoenix.controls.JFXTextField?>
 <?import javafx.geometry.Insets?>
 <?import javafx.scene.layout.AnchorPane?>
 <?import javafx.scene.layout.HBox?>
 <?import javafx.scene.layout.VBox?>

<AnchorPane id="AnchorPane" prefHeight="255.0" prefWidth="368.0" 
xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" 
fx:controller="library.assistant.ui.addbook.FXMLDocumentController">
<children>
  <VBox prefHeight="363.0" prefWidth="368.0" AnchorPane.bottomAnchor="0.0" 
  AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" 
   AnchorPane.topAnchor="0.0">
       <children>
      <JFXTextField fx:id="title" labelFloat="true" promptText="Book Title">
           <VBox.margin>
              <Insets left="10.0" right="10.0" top="20.0" />
           </VBox.margin>
        </JFXTextField>
        <JFXTextField fx:id="id" labelFloat="true" layoutX="20.0" 
     layoutY="30.0" promptText="Book ID">
           <VBox.margin>
              <Insets bottom="10.0" left="10.0" right="10.0" top="20.0" />
           </VBox.margin>
        </JFXTextField>
        <JFXTextField fx:id="author" labelFloat="true" layoutX="20.0" 
   layoutY="30.0" promptText="Book Author">
           <VBox.margin>
              <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
           </VBox.margin>
        </JFXTextField>
        <JFXTextField fx:id="publisher" labelFloat="true" layoutX="10.0" 
    layoutY="55.0" promptText="Publisher">
           <VBox.margin>
              <Insets bottom="10.0" left="10.0" right="10.0" top="10.0" />
           </VBox.margin>
        </JFXTextField>
        <HBox prefHeight="58.0" prefWidth="368.0">
           <children>
              <JFXButton fx:id="saveButton" onAction="#addBook" 
   prefHeight="58.0" prefWidth="200.0" stylesheets="@addbook.css" text="Save" 
  />
              <JFXButton fx:id="cancelButton" layoutX="10.0" layoutY="10.0" 
onAction="#cancel" prefHeight="58.0" prefWidth="200.0" 
stylesheets="@addbook.css" text="Cancel" />
           </children>
        </HBox>
     </children>
  </VBox>
  </children>
  </AnchorPane>

...