【问题标题】:JDBC Select from Select ResultSetJDBC 从选择结果集中选择
【发布时间】:2013-11-17 12:20:14
【问题描述】:

这是我的桌子:

table Paciente
+------------------------------------+
|   Nome   |   RG   |   ID_Paciente  |
+------------------------------------+
|  Lucas   |  10101 |        1       |
+------------------------------------+

table Telefone
+---------------------------------------------------------+
|  DDD   |   Telefone   |   ID_Paciente  |   ID_Telefone  |
+---------------------------------------------------------+
|   41   |   123456789  |        1       |       1        |
+---------------------------------------------------------+

我需要从 Telefone 表中打印 DDD 和 Telefone。

我正在尝试做这样的事情:

String sql = "select ID_Paciente from Paciente where Nome = '"+nome+"'";
PreparedStatement st = c.getConnection().prepareStatement(sql);

ResultSet res = st.executeQuery();

sql = "select DDD from Telefone where ID_Paciente = '"+res.getString(1)+"'";
st = c.getConnection().prepareStatement(sql);

res = st.executeQuery();

while(res.next())
{   
      System.out.println("  DDD: "+res.getString(1));
}

但是,它不起作用

有什么帮助吗?

【问题讨论】:

  • 将 res.next() 放在第二个 sql 语句之前
  • 定义“它不工作”。发生什么了?您得到的异常包含一条有意义的消息,旨在被阅读。另外,请重新阅读有关 ptepared 语句的教程,因为您错过了重点,即能够安全地绑定参数,而不使用字符串连接。
  • 为什么不加入查询而不是触发两个不同的选择语句?
  • 我很担心,如果 paciente 是我认为的那样,这不是家庭作业。

标签: java sql select jdbc


【解决方案1】:

虽然我可以回答您的问题,但我认为分别触发两个 select 语句并不是一个好方法。您可以组合语句并触发一个查询:

"select DDD from Telefone where ID_Paciente in (select ID_Paciente from Paciente where Nome = '"+nome+"')"

【讨论】:

    【解决方案2】:

    你需要这样的东西(未经测试):

    final String sql = "SELECT t.DDD, t.Telefone FROM Telefone t" + 
                       " LEFT JOIN Paciente p ON (t.ID_Paciente = p.ID_Paciente)" + 
                       " WHERE p.Nome = ?";
    Connection con = null;
    PreparedStatement stm = null;
    ResultSet rs = null;
    
    try {
        con = c.getConnection();
        stm = con.prepareStatement(sql);
        stm.setString(1, nome);
    
        rs = stm.executeQuery();
    
        while (rs.next()) {
            System.out.println(String.format("DDD = %d, Telefone = %s", 
                rs.getLong(1), rs.getString(2)));
        }
    } catch (final SQLException e) {
        // TODO handle exception
        e.printStackTrace();
    } finally {
        try {
            if (rs != null) {
                rs.close();
            }
            if (stm != null) {
                stm.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (final SQLException e) {
            // ignore
        }
    }
    

    【讨论】:

      【解决方案3】:

      你可以使用 join 代替 2 个执行查询

      SELECT Telefone.DDD, Telefone.Telefone, 
      FROM Telefone
      INNER JOIN Paciente
      ON Telefone.ID_Paciente=Paciente.ID_Paciente;
      
      
      String sql = "SELECT Telefone.DDD, Telefone.Telefone, 
          FROM Telefone
          INNER JOIN Paciente
          ON Telefone.ID_Paciente=Paciente.ID_Paciente where Paciente.Nome=?";
      PreparedStatement st = c.getConnection().prepareStatement(sql);
      st.setString(1,nome);
      ResultSet res = st.executeQuery();
      while(res.next())
      {
      //your code to retrieve
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        相关资源
        最近更新 更多