sqlite 无法对基元类型int或double调用isEmpty()

deyfvvtc  于 2022-12-23  发布在  SQLite
关注(0)|答案(3)|浏览(175)

我正在编写一个JavaFX应用程序,我在其中将JavaFX TableView连接到我的Sqlite数据库,这里我尝试做的是,如果文本字段为空,那么它会要求用户填写所有数据。然而,因为在我的Sqlite数据库中,我有两组数据集为整型,一组为双精度型,所以我无法为这三组数据调用isEmpty to。然而,我不能将它们转换为String,因为我需要在后面进行计算。另一个方面是代码的最后一部分,当用户希望填充数据以添加一组新数据时,他可以清除他在这些文本字段中写入的任何内容,但是,我不确定整数和双精度的代码是什么,而不是“expeditionDate.setText(null);“。先谢谢你了。

String query = null;
    Connection connection = null;
    ResultSet resultSet = null;
    PreparedStatement preparedStatement;
    Expedition user = null;
    private boolean update;
    int studentId;

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

    @FXML
    private void save(MouseEvent event) {

        connection = DbConnect.connect();
        String Date = expeditionDate.getText();
        double Time = Double.valueOf(expeditionTime.getText());
        int Altitude = Integer.parseInt(expeditionAltitude.getText());
        int Distance = Integer.parseInt(expeditionDistance.getText());
        String Notes = expeditionNotes.getText();

        if (Date.isEmpty() || Time.isEmpty() || Altitude.isEmpty() || Distance.isEmpty()|| Notes.isEmpty()) {
            Alert alert = new Alert(Alert.AlertType.ERROR);
            alert.setHeaderText(null);
            alert.setContentText("Please Fill All DATA");
            alert.showAndWait();

        } else {
            getQuery();
            insert();
            clean();

        }

    }

    @FXML
    private void clean() {
        expeditionDate.setText(null);
        expeditionTime.setText(null);
        expeditionAltitude.setValue(null);
        expeditionDistance.setValue(null);
        expeditionNotes.setText(null);
        
    }
js5cn81o

js5cn81o1#

进行测试以确保所需数据在您尝试处理数据并保存或更改数据库之前已就位:

@FXML
private void save(MouseEvent event) {
    if (aFormFieldIsEmpty()) {
       new Alert(Alert.AlertType.WARNING, "One or more fields on the form is empty!\n"
            + "Data must be provided in all fields (except Notes)!").showAndWait();
        return;       
    }

    connection = DbConnect.connect();
    String Date = expeditionDate.getText();
    double Time = Double.valueOf(expeditionTime.getText());
    int Altitude = Integer.parseInt(expeditionAltitude.getText());
    int Distance = Integer.parseInt(expeditionDistance.getText());
    String Notes = expeditionNotes.getText();
    
    getQuery();
    insert();
    clean();
}

@FXML
public boolean aFormFieldIsEmpty() {
    return expeditionDate.getText().isEmpty() || 
           expeditionTime.getText().isEmpty() || 
           expeditionAltitude.getText().isEmpty() || 
           expeditionDistance.getText().isEmpty();
}

@FXML
private void clean() {
    expeditionDate.clear();
    expeditionTime.clear();
    expeditionAltitude.clear();
    expeditionDistance.clear();
    expeditionNotes.clear();
}
dced5bon

dced5bon2#

如果getText()为空,则Double.valueOf将抛出异常,但要执行其他检查和更好的空处理-
变更

双精度时间=双精度.值Of(远征时间.获取文本());

双精度时间=双精度.值Of(远征时间.getText());

与整数相同-将整数高度更改为整数高度

plupiseo

plupiseo3#

恕我直言,如果你不确定是否设置正确,就不应该尝试将一个文本解析成一个数值。你的问题是你无法检查值是否为空,因为原语类型没有内置的isEmpty方法。

private boolean isEmpty(String value) {
    return value == null || value.trim().length() == 0;
}

我将使用上面的方法来检查expeditionTime.getText()是否为null或空,如果是,则使用默认值ie.0.0或您想要的任何默认值。

相关问题