使用Derby数据库运行javafxml应用程序时出错

我是Java新手。我正在NetBeans IDE 8.2中编写JavaFXML应用程序,其中包括一个用于连接到首先为我创建数据库的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);
}

}


这是我的fxml文件

 <?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>

zhangyukexin 回答:使用Derby数据库运行javafxml应用程序时出错

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2679818.html

大家都在问