在添加到表之前更改rs.getString null值 - javaFX

时间:2015-08-05 20:30:16

标签: java javafx

当我从数据库中提取数据时,所有内容都填充了我的表格“tblSoftware”。

当while(rs.next())运行时,是否可以在“rs.getString(”Host_Name“)))中捕获空值?并在将值添加到表之前更改该值?

提前致谢。

来自我的SoftwareController

public void initialize(URL location, ResourceBundle resources)  {

    try {

        data = FXCollections.observableArrayList();
        conn = DBconnection.makeConnection();
        statement = conn.createStatement();
        String SQL = "SELECT * FROM Data_CMDB_Main";
        ResultSet rs = statement.executeQuery(SQL);


        while (rs.next())   {
            data.add(new Software(rs.getString("CI_ID"),
                                  rs.getString("Name"),
                                  rs.getString("Operating_System"),
                                  rs.getString("Serial_Number"),
                                  rs.getString("Location_Line_1"),
                                  rs.getString("Cabinet"),
                                  rs.getString("Host_Name")));

        /*if (rs.getString("Host_Name").equals(null)) {
        //System.out.println("null found");
        rs.equals("");
        }
        else
        {*/

            CI_IDcol.setCellValueFactory(new PropertyValueFactory("CI_ID"));
            Namecol.setCellValueFactory(new PropertyValueFactory("Name"));
            Operating_Systemcol.setCellValueFactory(new PropertyValueFactory("Operating_System"));
            Serial_Numbercol.setCellValueFactory(new PropertyValueFactory("Serial_Number"));
            Locationcol.setCellValueFactory(new PropertyValueFactory("Location_Line_1"));
            Cabinetcol.setCellValueFactory(new PropertyValueFactory("Cabinet"));
            Host_Namecol.setCellValueFactory(new PropertyValueFactory("Host_Name"));

            tblSoftware.setItems(null);
            tblSoftware.setItems(data);

模型类软件

public class Software {

    private StringProperty CI_ID;
    private StringProperty Name;
    private StringProperty Operating_System;
    private StringProperty Serial_Number;
    private StringProperty Location_Line_1;
    private StringProperty Cabinet;
    private StringProperty Host_Name;

    //public Software(String CI_ID, String Name, String Operating_System, String Serial_Number) {
    public Software(String CI_ID, String Name, String Operating_System, String Serial_Number, String Location_Line_1, String Cabinet, 
            String Host_Name)   {
        this.CI_ID = new SimpleStringProperty(CI_ID);
        this.Name = new SimpleStringProperty(Name);
        this.Operating_System = new SimpleStringProperty(Operating_System);
        this.Serial_Number = new SimpleStringProperty(Serial_Number);
        this.Location_Line_1 = new SimpleStringProperty(Location_Line_1);
        this.Cabinet = new SimpleStringProperty(Cabinet);
        this.Host_Name = new SimpleStringProperty(Host_Name);

    }

    public StringProperty CI_IDProperty()   {
        return CI_ID;
    }

    public StringProperty NameProperty()    {
        return Name;
    }

    public StringProperty Operating_SystemProperty()    {
        return Operating_System;
    }

    public StringProperty Serial_NumberProperty()   {
        return Serial_Number;
    }

    public StringProperty Location_Line_1Property() {
        return Location_Line_1;
    }

    public StringProperty CabinetProperty() {
        return Cabinet;
    }

    public StringProperty Host_NameProperty()   {
        return Host_Name;
    }
}

2 个答案:

答案 0 :(得分:0)

我不确定我理解这个问题。你能不能做到,例如,

String name = rs.getString("Name");
if (name == null) {
    name = "default name";
}
// ...
data.add(new Software(..., name, ...));

在Java 8中,您可以使用Optional,例如

String name = Optional.ofNullable(rs.getString("Name")).orElse("default name");

答案 1 :(得分:0)

如果您使用的是java> = 8 rs.getString("Serial_Number") ?: "DEFAULT",如果不是,则需要使用三元运算符rs.getString("Serial_Number") != null ? rs.getString("Serial_Number") : "DEFAULT"

编辑:我查看了两次或更多次调用getString()方法,看起来这种行为支持不是驱动程序所必需的,所以第二个例子可能有效。查看更多:http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4080742。在这种情况下,您需要将其分配给变量以使用三元运算符。