2017-01-09 31 views
0

値を取得しようとしているテーブルではなく、別のテーブルの列から値が移入されています。同じ名前のJDBC複数の列

mySQLからは、nullの結果が得られます。しかし、プログラム内からは、値を表示しています(その行に1つ与えた場合)。または、別のテーブルの値を表示しています。これはエイリアスを使用して、どのテーブルから引き出すべきかを明示的に述べている間でさえあります。

私はデバイステーブルとデバイスタイプテーブルを持っています。デバイステーブルにはデバイスと同じフィールドがすべてありますが、必要なフィールドを指定するのは1と0だけです。

これは、両方のテーブルの値がINTの場合、resultSet.getInt("column_with_issue")を使用する場合にのみ発生します。これは、デバイスの編集/作成GUIフォームを生成するときに使用されます。型が異なる限り、resultSet.getString("column_with_no_issues")を実行すると、適切なnullが返されます。

これは私の元のクエリであり、修正するために提案ごとに変更しようとしたものです。

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の質問に記載されているような修正が可能です。これにより、各特定の列に独自の名前が付けられます。しかし、たとえ私が(2つの異なる変数タイプを持つ例として)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

回答のようになります。私は馬鹿です。整数のデフォルト値は0で、文字列はnullです。 JDBCはnullを返していますが、その値を持つDeviceオブジェクトを作成すると、デフォルト値は0になります。これは、thisページの1/3の方法について説明しています。

関連する問題