有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java TableView不会返回sqlite数据

无法找出数据未显示的原因

MainLayout嵌入在TableLayout中

MainLayout.fxml

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

<?import javafx.scene.control.ComboBox?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TableView?>
<?import javafx.scene.layout.AnchorPane?>

<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <ComboBox fx:id="repartoCompo" layoutX="25.0" layoutY="58.0" prefWidth="150.0" />
      <Label layoutX="25.0" layoutY="33.0" text="Seleziona Reparto" />
      <ComboBox fx:id="attivitaCombo" layoutX="25.0" layoutY="164.0" prefWidth="150.0" />
      <Label layoutX="25.0" layoutY="139.0" text="Seleziona Attività" />
      <TableView fx:id="tableMain" layoutX="200.0" layoutY="17.0" prefHeight="671.0" prefWidth="1152.0">
        <columns>
          <TableColumn fx:id="nomeCol" prefWidth="75.0" text="Nome" />
          <TableColumn fx:id="repartoCol" prefWidth="75.0" text="Reparto" />
          <TableColumn fx:id="attivitaCol" prefWidth="75.0" text="Attività" />
          <TableColumn fx:id="giornoCol" prefWidth="75.0" text="Giorno" />
          <TableColumn fx:id="finegiornoCol" prefWidth="75.0" text="Fine giorno" />
        </columns>
      </TableView>
   </children>
</AnchorPane>

TabLayout extract to show link between layouts

 <TabPane fx:id="tabPane" layoutY="6.0" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" minWidth="-Infinity" tabClosingPolicy="UNAVAILABLE" AnchorPane.topAnchor="0.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0">
        <tabs>
          <Tab text="Visualizza">
            <fx:include source="MainLayout.fxml" />
          </Tab>

Operatori.java (The Model)

package application;

import javafx.beans.property.SimpleStringProperty;

public class Operatori {


        private  SimpleStringProperty nome = new SimpleStringProperty();
        private  SimpleStringProperty reparto = new SimpleStringProperty();
        private  SimpleStringProperty attivita = new SimpleStringProperty();
        private  SimpleStringProperty giorno = new SimpleStringProperty();
        private  SimpleStringProperty finegiorno = new SimpleStringProperty();

        public String getNome() {
            return nome.get();
        }

        public void setNome(String nomeIn) {
            nome.set(nomeIn);
        }

        public String getReparto() {
            return reparto.get();
        }

        public void setReparto(String repartoIn) {
            reparto.set(repartoIn);
        }

        public String getAttivita() {
            return attivita.get();
        }

        public void setAttivita(String attivitaIn) {
            attivita.set(attivitaIn);
        }

        public String getGiorno() {
            return giorno.get();
        }

        public void setGiorno(String giornoIn) {
            giorno.set(giornoIn);
        }

        public String getFinegiorno() {
            return finegiorno.get();
        }

        public void setFineGiorno(String finegiornoIn) {
            finegiorno.set(finegiornoIn);
        }

    }

Main class

package application;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.stage.Stage;
import javafx.scene.Parent;
import javafx.scene.Scene;



public class Main extends Application {

    Connection conn;
    PreparedStatement pst = null;
    ResultSet rs = null;


    @Override
    public void start(Stage primaryStage) {
        try {
            CheckConnection();
            Parent root = FXMLLoader.load(getClass().getResource("TabLayout.fxml"));
            Scene scene = new Scene(root,600,400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
            primaryStage.setTitle("Gestione Personale");
            primaryStage.setScene(scene);
            primaryStage.show();
            primaryStage.setMaximized(true);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public void CheckConnection(){
        conn = SqlConnection.DbConnector();
        if(conn == null){
            System.out.println("Connection not successful");
            System.exit(1);
        }
        else{
            System.out.println("Connection  successful");
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

OperatoriController

package application;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;

public class OperatoriController {

    @FXML
    private TableView<Operatori> tableMain;

    @FXML
    private TableColumn<Operatori,String> nomeCol;

    @FXML
    private TableColumn<Operatori,String> repartoCol;

    @FXML
    private TableColumn<Operatori,String> attivitaCol;

    @FXML
    private TableColumn<Operatori,String> giornoCol;
    @FXML
    private TableColumn<Operatori,String> finegiornoCol;

    //START | SQLITE
    private static Connection con;
    private static Statement stat;
    private PreparedStatement prep;
    //END | SQLITE

    private ObservableList <Operatori> listaMain; 

    @FXML
    public void initialize() {
        listaMain = FXCollections.observableArrayList();

        nomeCol.setCellValueFactory(
                new PropertyValueFactory<Operatori, String>("nome")
        );
        repartoCol.setCellValueFactory(
                new PropertyValueFactory<Operatori, String>("reparto")
        );
        attivitaCol.setCellValueFactory(
                new PropertyValueFactory<Operatori, String>("attivita")
        );
        giornoCol.setCellValueFactory(
                new PropertyValueFactory<Operatori, String>("giorno")
        );
        finegiornoCol.setCellValueFactory(
                new PropertyValueFactory<Operatori, String>("finegiorno")
        );


        try {            
            con = SqlConnection.DbConnector();
            stat = con.createStatement();
            ResultSet rs = con.createStatement().executeQuery("SELECT NOME,Reparto,Attivita,Day,FineDay FROM Visualizza");
            System.out.println(rs);
            while (rs.next()) {
                Operatori nt = new Operatori();
                nt.setNome(rs.getString("NOME"));
                nt.setReparto(rs.getString("Reparto"));
                nt.setAttivita(rs.getString("Attivita"));
                nt.setGiorno(rs.getString("Day"));
                nt.setFineGiorno(rs.getString("FineDay"));
                listaMain.add(nt);
            }            
            tableMain.setItems(listaMain);


        } catch (SQLException ex) {
            Logger.getLogger(OperatoriController.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}

Connection to DB class

package application;
import java.sql.*;

public class SqlConnection 
{
    public static Connection DbConnector()
    {
    Connection conn=null;
        try{
            Class.forName("org.sqlite.JDBC");
            conn = DriverManager.getConnection("jdbc:sqlite:C:/Users/Utente/Desktop/DB/prova.db");

            return conn;

            }catch(ClassNotFoundException | SQLException e)
             {
              System.out.println(e);

             } 
        return null;
    }

}

我试着到处找,但我不明白,连接到数据库说“成功”。 列仍为空。 我不认为这是一个命名问题,因为我检查了很多次,但好吧,我可能是错的


共 (1) 个答案

  1. # 1 楼答案

    正如James_D指出的,您的控制器类从未被使用过。您需要在FXML中指定控制器:

    fx:controller="application.OperatoriController.java"
    

    或者在从Main加载FXML时指定控制器。爪哇:

    try {
        CheckConnection();
    
        FXMLLoader loader = new FXMLLoader();
        loader.setController(new OperatoriController());
    
        Parent root = loader.load(getClass().getResource("TabLayout.fxml"));
        Scene scene = new Scene(root,600,400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setTitle("Gestione Personale");
        primaryStage.setScene(scene);
        primaryStage.show();
        primaryStage.setMaximized(true);
    } catch(Exception e) {
        e.printStackTrace();
    }