2017-06-05 125 views
0

是否有可能使用預處理語句在Java中進行聯接?準備好的語句加入Java

public class Test { 

    static Connection conn; 
    static PreparedStatement ps; 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     try { 

     String sql = "select addr.address_id from address addr inner join pizza_stores ps on addr.address_id = ps.address_id"; 

     conn = ConnectionUtil.getConnection(); 
     ps = conn.prepareStatement(sql); 
     System.out.println("DEBUG--: before query"); 
     ResultSet rs = ps.executeQuery(sql); 



     while(rs.next()) { 
      System.out.println(rs.getInt("addr.address_id")); 
     } 

     ps.close(); 
     conn.close(); 

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


    } 

} 

我沒有得到任何結果,但是當我在SQL Developer中運行我得到的結果(例如ADDRESS_ID - > 1,2,3)。我將在稍後使用存儲過程。我只是好奇。

+3

你可以在sql語句中做任何你想做的事情。還有其他的事情在這裏並不明顯。 – OldProgrammer

+2

您如何使用「prepareStatement」似乎存在錯誤。你首先調用'ps = conn.prepareStatement(sql);'然後再次傳入sql ResultSet rs = ps.executeQuery(sql);'。不過,我認爲它應該可以工作,因爲您沒有任何投入來設置。空白的結果集可能是連接到db用戶?嘗試使用rs.getIn(1)而不是列名? –

+0

嘗試使用'getInt(「address_id」)'而不是'getInt(「addr.address_id」)' –

回答

1

我想出了這個問題。

所以我有兩個表(地址和pizza_stores)。

當我創建pizza_stores表時,在FK中,我將它引用到pizza_stores表(同一表)而不是地址表。因此它不打印任何東西。

java代碼的工作原理是在sql中更多的一個約束問題。