Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tableview不显示数据库中的数据_Java_Sql_Database_Javafx_Tableview - Fatal编程技术网

Java tableview不显示数据库中的数据

Java tableview不显示数据库中的数据,java,sql,database,javafx,tableview,Java,Sql,Database,Javafx,Tableview,我无法填充我的tableview。我相信问题出在控制器上,我的数据被发送到FXML文件的方式,因为下面的系统输出显示了我数据库中的内容 请让我知道我哪里做错了。我看了所有关于这方面的教程,但没有一本适合我的问题 谢谢 主应用程序: package tableview; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.s

我无法填充我的tableview。我相信问题出在控制器上,我的数据被发送到FXML文件的方式,因为下面的系统输出显示了我数据库中的内容

请让我知道我哪里做错了。我看了所有关于这方面的教程,但没有一本适合我的问题

谢谢

主应用程序:

package tableview;


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

public class MainApp extends Application {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    Parent root = FXMLLoader.load(getClass().getResource("view/FXMLTable.fxml"));
    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.show();    
}
}
控制器:

import tableview.model.Person;


public class FXMLTableController{

@FXML
public TableView<Person> tableview ;
@FXML
private TableColumn<Person, Number> clientIdColumn;
@FXML
private TableColumn<Person, String> firstNameColumn;
@FXML
private TableColumn<Person, String> lastNameColumn;

@FXML   
private void initialize() {
         assert tableview != null : "fx:id=\"tableview\" was not injected: check your FXML file 'UserMaster.fxml'.";
         clientIdColumn.setCellValueFactory(cellData -> cellData.getValue().
                 clientIDProperty());

        firstNameColumn.setCellValueFactory(cellData -> cellData.getValue()
                .firstNameProperty());              
        lastNameColumn.setCellValueFactory(cellData -> cellData.getValue()
                .lastNameProperty());

         buildData();

    }

private ObservableList<Person> data;


public  void buildData(){        
    data = FXCollections.observableArrayList();
    Connection con = null;


        try {
            Class.forName("org.sqlite.JDBC");
            con = DriverManager.getConnection("jdbc:sqlite:tableviewdb.db");

        String SQL = "Select * from INFO";            
        ResultSet rs = con.createStatement().executeQuery(SQL);  
        while(rs.next()){
            Person per = new Person();
            per.ClientID.set(rs.getInt("CLIENTID"));
            per.FirstName.set(rs.getString("FIRSTNAME"));
            per.LastName.set(rs.getString("LASTNAME"));

            data.add(per);  

        }
        tableview = new TableView<Person>();
        tableview.setItems(data);
        System.out.println(tableview.getItems().get(1).ClientID);
    }
    catch(Exception e){
          e.printStackTrace();
          System.out.println("Error on Building Data");            
    }
   }
}
FXML文件: 暂时忽略保存按钮。。。

您正在创建一个新的TableView并设置其项,而不是设置FXML文件定义的表上的项。移除

tableView = new TableView<Person>();
您忘记了FXML文件中的fx:id属性。如果在启用断言的情况下运行它,应该会看到断言错误。请参阅更新的答案。
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8">
   <children>
      <SplitPane prefHeight="400.0" prefWidth="600.0">
         <items>
            <SplitPane dividerPositions="0.5" orientation="VERTICAL" prefHeight="200.0" prefWidth="160.0">
              <items>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                     <children>
                        <TextField layoutX="93.0" layoutY="34.0" />
                        <TextField layoutX="93.0" layoutY="85.0" />
                        <Label layoutX="35.0" layoutY="39.0" text="name" />
                        <Label layoutX="35.0" layoutY="90.0" text="email" />
                        <Button layoutX="204.0" layoutY="140.0" mnemonicParsing="false" text="save" />
                     </children>
                  </AnchorPane>
                <AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="100.0" prefWidth="160.0">
                     <children>
                        <TableView layoutY="-2.0" prefHeight="200.0" prefWidth="598.0">
                          <columns>
                            <TableColumn prefWidth="302.0" text="name" />
                            <TableColumn prefWidth="295.0" text="email" />
                          </columns>
                        </TableView>
                     </children>
                  </AnchorPane>
              </items>
            </SplitPane>
         </items>
      </SplitPane>
   </children>
</AnchorPane>
tableView = new TableView<Person>();
<TableView fx:id="tableview" ... >
  <columns>
    <TableColumn fx:id="firstNameColumn" ... />
    ...