具有相同名称的JDBC多列

具有相同名称的JDBC多列

问题描述:

我遇到一个问题,该值是从不同表中的列填充的,而不是我希望从中抽取的表。具有相同名称的JDBC多列

从mySQL中,我得到期望的结果null;然而,在程序内部,它正在显示值(如果我已经给出了该行的一个值)或来自不同表格的值。这甚至在使用别名时也明确指出要从哪个表中提取。

我有一个设备表和一个设备类型表。设备表具有与设备相同的字段,但它只是1和0来决定需要哪些字段。 (这在生成编辑/创建设备GUI表单时使用。)

仅当使用resultSet.getInt("column_with_issue")(如果这两个表中的值为INT s)时才会发生这种情况。只要类型不同,它会返回一个合适的空值,当我执行resultSet.getString("column_with_no_issues")时。

这是我的原始查询,以及我试图根据建议来修改它。

SELECT d.*, dt.type, os.os_name FROM device d inner join device_type dt on d.type_id = dt.id left outer join operating_system os on d.os = os.id 
WHERE d.division_number = 1 or 1 
AND (d.asset_tag = 1 or 1) 
AND (dt.type = 1 or 1); 

可能的修复,如其他人所描述的stackoverflow/javaranch问题。这将给每个特定的列自己的名字。然而,即使当我去拉(作为一个例子,有两个不同的变量类型)dwireless,我仍然得到应该从我的device_type.wireless该类设备的整数值,而不是预期的空值。

SELECT d.id as did, d.division_number as ddivision_number, d.current_location as dcurrent_location, d.type_id as dtype_id, d.model as dmodel, d.asset_tag as dasset_tag, d.serial_number as dserial_number, d.manufacture_date as dmanufacture_date, d.screen as dscreen, d.os as dos, d.users_name as dusers_name, d.office_installed as doffice_installed, d.memory as dmemory, d.series as dseries, d.ip_address as dip_address, d.host_name as dhostname, d.vm_host as dvm_host, d.processor as dprocessor, d.wireless as dwireless, d.purchase_quality as dpurchase_quality, d.purchase_price as dpurchase_price, d.active as dactive, d.notes as dnotes, dt.type, os.os_name 
FROM device d inner join device_type dt on d.type_id = dt.id left outer join operating_system os on d.os = os.id 
WHERE d.division_number = 1 or 1 
AND (d.asset_tag = 1 or 1) 
AND (dt.type = 1 or 1); 

这是我用来从结果集中提取变量的Java代码。

private ObservableList<Device> getDevices(String sqlStatement) throws SQLException { 
     ObservableList<Device> devices = FXCollections.observableArrayList(); 

     // Run the query to select all of our devices. 
     Statement searchDeviceStatement = Main.myConn.createStatement(); 
     ResultSet rs = searchDeviceStatement.executeQuery(sqlStatement); 

     // Add all of our devices into our array list to be displayed. 
     // These are the actual columns of the database. 
     while (rs.next()) { 
      devices.add(new Device(rs.getInt("did"), rs.getInt("ddivision_number"), rs.getInt("dtype_id"), 
        rs.getString("type"), rs.getString("dmodel"), rs.getInt("dasset_tag"), rs.getString("dserial_number"), 
        rs.getInt("dmanufacture_date"), rs.getString("dscreen"), rs.getInt("dos"), rs.getString("os_name"), 
        rs.getString("dusers_name"), rs.getInt("doffice_installed"), rs.getString("dmemory"), 
        rs.getString("dseries"), rs.getString("dip_address"), rs.getString("dhost_name"), 
        rs.getString("dvm_host"), rs.getString("dprocessor"), rs.getInt("dwireless"), 
        rs.getString("dpurchase_quality"), rs.getDouble("dpurchase_price"), rs.getInt("dactive"), rs.getString("dnotes"))); 
     } 
     return devices; 
    } 

的查询工作从MySQL工作台意,所看到here,但在我的节目中显示的数据时,它看起来像this.

答:我是一个白痴。整数的默认值为0,而字符串为空。 JDBC返回null,但是当它使用该值创建我的设备对象时,它默认为0.这是在this页面上向下三分之一处解释的。