2017-06-05 139 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中更多的一个约束问题。