具有相同名称的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;
}