1

所以程序是连接到一个 .mdb 文件作为我们的数据库。我已经将所有其他代码编写到程序中并且知道它可以正常工作,但是我现在遇到了将复杂的 SQL 语句作为参数传递给 createQuery(Sring, int) 方法的问题。

有两张表Person,分别有Name、Id、City、State Classes,里面有Id、Course、Grade

此行的预期目的是从 Persons 表中打印出“Name and Id”,并从 Classes 表中打印“Course and Grade”。该查询仅打印在特定课程('CSC 225')中具有匹配 ID(Person.Id = Classes.Id)且成绩 > 70 的条目。

我们从来没有深入学习过 SQL 语句,所以我的基本理解是编造了以下代码行。

String s = "SELECT " + personTableTitle + ".Name, " + personTableTitle + ".Id, " + 
                            classesTableTitle + ".Course, " + classesTableTitle + ".Grade FROM " +
                            personTableTitle + " " + classesTableTitle + " WHERE " +
                            personTableTitle + ".ID = " + classesTableTitle + ".Id AND " +
                            "Course = 'CIS 225' AND " + classesTableTitle + ".Grade > 70 AND " +
                            personTableTitle + ".Id = ? AND " + classesTableTitle + ".Id = ?";

System.out.print(s);   // Double check of my SQL Statement before passing

db.createQuery(s, 4);

从周三晚上开始,我一直在玩这个 SQL 语句,但运气不佳。

4

4 回答 4

0

这是我对 SQL 代码的建议

String s = "SELECT P.Name, P.Id, ";
s = s + "C.Course, C.Grade ";
s = s + "FROM Person P ";
s = s + "JOIN Classes C  ";
s = s + "ON P.ID = C.ID ";
s = s + "WHERE Course = 'CIS 225' AND C.Grade > 70;";

我将每个作业分成自己的一行。

于 2013-07-20T03:54:42.500 回答
0

我只看到两个问题。Sql 子句中的表名之间需要逗号FROM,即...FROM table1, table2 WHERE.... 因此,将您的线路更改为

             personTableTitle + ", " + classesTableTitle + " WHERE " +

下一个可能不是问题,但最好在每个字段引用前包含表名。

             classesTableTitle + ".Course = 'CIS 225' AND " + classesTableTitle + ".Grade > 70 AND " +
于 2013-07-19T22:24:25.973 回答
0

您绝对应该直接在数据库(控制台或 GUI)上尝试查询。一旦您的查询有效,您就可以很快将其翻译回 Java。

否则,最好为表添加别名;例如:

select *
from Person P, Classes C
where P.Name = 'joe' and P.id = C.id

您可能还需要outer join获取数据(查看如何为您的数据库进行连接)。

于 2013-07-20T00:06:28.797 回答
0

已经解决了,谢谢大家的帮助。

我开始使用发布的建议重写它,并将其作为字符串:

String s = "SELECT Person2.Name, Person2.Id, Classes.Course, Classes.Grade FROM Person2, Classes WHERE Classes.Id = Person2.Id AND Classes.Course = 'CIS 225' AND Classes.Grade >70";

它可以工作,所以我现在可以让它更漂亮。我在原始帖子中使用 java 中的变量名的原因是老师想要的。她非常固执,从我的材料中删除了一些简单的东西,比如写作s += whatever;而不是s = s + whatever;

于 2013-07-20T23:34:39.257 回答