2016-04-18 15 views
0

この文を実行してjavaを処理する方法を教えてください。戻り値を取得し、次にそれを行う方法で従業員に選択されている次の結果セットを取得することは可能ですか?別の結果セットを持つDBからの戻り値

すべての例が1つのSELECTの結果であり、DBからのRETURNでクエリを見つけることができないため、私が望むことを実行するためにGoogleで正確な方法を見つけることができません。しかし、questionによれば、.NETができるようにDB(java)から複数の結果セットを管理することは可能です。

私はpostgresql 9.4を使用していますが、私は何をしようとしているのかにはストアドproc(関数)を使用したくありません。

この

は私がテストしようとしてきたコードですが、私はあなたが事実から離れて(物事を過度に複雑されている1

public Employee getEmployee(Connection con, String code) { 
    Employee employee = new Employee(); 
    try { 
     String query = 
       "IF EXISTS(SELECT * FROM employee WHERE code = ?) THEN " 
       + "RETURN 1; " 
       + "ELSE " 
       + "RETURN 2; " 
       + "END IF; " 
       + "SELECT EmployeeID, FirstName FROM employee where code = ?; "; 
     PreparedStatement stmt = con.prepareStatement(query); 
     stmt.setString(1, code); 
     stmt.setString(2, code); 
     boolean hasResults = stmt.execute(); 
     int returnValue = 0; 
     while(hasResults){ 
      ResultSet rs = stmt.getResultSet(); 
      returnValue = rs.getInt(1); 
      if(returnValue == 1){ 
       hasResults = stmt.getMoreResults(); 
       while(hasResults){ 
        employee.setId(rs.getInt("EmployeeID")); 
        employee.setFirstName(rs.getString("FirstName")); 
       } 
      } 
     } 
     return employee; 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
     return null; 
    } 

答えて

0

「IF」行に構文エラーがあることが例外を取得しますSQLにはifはありません)。いいえ場合にも、そのようif (rs.next())Employeeインスタンスの作成を移動したい場合があります

public Employee getEmployee(Connection con, String code) { 
    Employee employee = new Employee(); 
    try { 
     String query = "SELECT EmployeeID, FirstName FROM employee where code = ?"; 
     PreparedStatement stmt = con.prepareStatement(query); 
     stmt.setString(1, code); 
     ResultSet rs = stmt.executeQuery(); 
     if (rs.next()){ 
      employee.setId(rs.getInt("EmployeeID")); 
      employee.setFirstName(rs.getString("FirstName")); 
     } 
     return employee; 
    } catch (Exception e) { 
     System.out.println(e.getMessage()); 
     return null; 
    } 
} 

ちょうど選択を実行し、そのような従業員が存在しない場合は、空の結果セットを取得します従業員が存在する場合、メソッドはnullを返します。あなたはまた、クエリ文字列から;を削除する必要がありどれも


が存在しない場合でも、上記のコードは、常にEmployeeを返します。 Postgresドライバは;で終了した文をうまく実行しますが、これはJDBC準拠ではなく、他のドライバ(またはDBMS)は実行を拒否することがあります。

+0

私はあなたの答えをありがとう。私の質問は一例でした。いずれにしても、戻り値の後にクエリーを続ける方法はありますか。複数のクエリを実行し、1つのトランザクション/実行で複数の結果セットを取得したい。しかし、同時に私は機能を実行することができますが、特にDBMSで事前コンパイルされたものではなく、クエリ文字列として機能したいと考えています。 –

関連する問題