2017-06-17 11 views
0

私はそれらに関連する外部キーを持つ2つのテーブルがあります:私は値が両方のテーブルを形成取得するために、SQLクエリを使用していた enter image description here外部キーに基づいて参照テーブルから値を取得する方法は?

を:

User u = new User(); 

String sql = "SELECT * FROM user INNER JOIN account ON user.id = account.user WHERE user.id = 1 "; 

try { 
     Statement stm = con.createStatement(); 

     ResultSet rsu = stm.executeQuery(sql); 

     while(rsu.next()){ 
      u.setFname(rsu.getString("fname")); 
      u.setLname(rsu.getString("lname")); 
      u.setMname(rsu.getString("mname")); 
      u.setGender(rsu.getString("gender")); 
      u.setAddress(rsu.getString("address")); 
      u.setCitizenship(rsu.getLong("citizenship")); 

      /** 
      * 
      * Here i want to get values of account table and set it on 
      * user object to return u 
      * 
      */ 
     } 

     return u; 

    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
+0

列名を使用して結果セットの値に直接アクセスできるとします。 –

答えて

0

テーブルの値を取得するのは簡単です。 ResultSetにすでに入っているアカウントテーブルの列名を指定するだけです。

SELECT user.*, account.* FROM user INNER JOIN account ON user.id = account.user WHERE user.id = 1

2:

u.setAccountID(rsu.getLong("accId")); 
ここ

アカウントIDがすでに結果にデータベースから取得した結果セットのオブジェクトに格納されているのでようなあなたのSQLに

0

1)アカウントデータを含めるを設定しました単にユーザフィールドのような)アクセスアカウントフィールド:

u.setAccountType(rsu.getString("accountType")); u.setAccountNo(rsu.getString("accountNo"));

3)finallyブロックにStatementを必ず閉じてください。

4)あなたは、あなたが1つのレコードだけを期待しているので、全体の結果セットを反復処理する必要がいけません。 whileifに置き換えてください。

+0

は動作しませんでした...ラインにエラーが表示されます \t \t \t \t u.setAccountType(rsu.getString( "accountType")); – Space

+0

エラーとは何ですか?ここでは 'User'オブジェクトに対して' setAccountType'メソッドがあると推測しています。 – tsolakp

関連する問題