JDBC 从选择结果集中选择
Posted
技术标签:
【中文标题】JDBC 从选择结果集中选择【英文标题】:JDBC Select from Select ResultSet 【发布时间】: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 是我认为的那样,这不是家庭作业。 【参考方案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
【讨论】:
以上是关于JDBC 从选择结果集中选择的主要内容,如果未能解决你的问题,请参考以下文章
使用 sql server 从 jdbc 中的结果集中转到最后一行
sql 将单元ID和“硬编码”数据选择到查询结果集中,该结果集可以粘贴到sql开发人员中,用于缺少特定单元的单元