Java 外键不输出查询数据
我正在尝试输出poemtitle和录制日期。当它运行时,它会输出诗歌标题,然后给出诗歌的创作日期而不是记录日期?这是因为关系吗?很可能是因为选择列表中的Java 外键不输出查询数据,java,mysql,jdbc,Java,Mysql,Jdbc,我正在尝试输出poemtitle和录制日期。当它运行时,它会输出诗歌标题,然后给出诗歌的创作日期而不是记录日期?这是因为关系吗?很可能是因为选择列表中的* 按返回顺序指定要返回的列 我们只是猜测包含“date recorded”的列的名称及其所在的表: try { Statement s = conn.createStatement(); ResultSet result2 = s.executeQuery("Select Distinct * From Poem p,Recor
*
按返回顺序指定要返回的列
我们只是猜测包含“date recorded”的列的名称及其所在的表:
try {
Statement s = conn.createStatement();
ResultSet result2 = s.executeQuery("Select Distinct * From Poem p,Recording r Where r.PoemTitle = p.PoemTitle AND r.poemTitle = 'poem1'");
System.out.print("Result (Select with Join): ");
while (result2.next()) {
System.out.println(result2.getString(1)+ " " + result2.getString(2)+ result2.getString(3));
}
} catch(Exception e) {
System.out.print(e.getMessage());
}
注: 放弃join操作的老式逗号语法,改用join关键字,并将join谓词从WHERE子句重新定位到ON子句 避免在选择列表中使用
*
。显式列出要返回的列/表达式。当我们阅读代码和SQL语句时,我们不知道返回了多少列,列的顺序是什么,或者数据类型是什么。(我们得去看看表的定义。)
显式列出返回的列/表达式只需要一点点工作。如果代码只编写过,那么就可以了,节省编写时间。但代码的读取量是其编写量的十倍。(带有*
的SQL语句使得SQL语句实际上无法识别getString(1)
引用的列
列出列还可以提高数据库的效率,准备一个只有几列的结果集而不是几十列的结果集,我们还可以将一个较小的结果集从数据库传输到客户机。对于列的子集,我们更可能使用覆盖索引进行查询
SELECT p.PoemTitle
, r.dateRecorded
, r.readBy
FROM Poem p
JOIN Recording r
ON r.PoemTitle = p.PoemTitle
WHERE r.poemTitle = 'poem1'
GROUP
BY p.PoemTitle
, r.dateRecorded
, r.readBy
ORDER
BY p.PoemTitle
, r.dateRecorded DESC
, r.readBy