从数据库中的不同表中检索数据,发送要执行的SQL代码,返回数据?

时间:2013-12-05 12:49:53

标签: java mysql sql sql-server jdbc

我正在用Java创建一个连接数据库,或者与我在其他地方设置的数据库交谈。我想对一个语句使用executeQuery方法,并收到一个ResultSet,我将从中检索ResultSet中收到的信息。

我的问题在于SQL命令,如;我发送到数据库的查询。有些东西似乎是错的,我在发送命令的时候得到一个SQLException,这意味着我一定做错了。 也许我写错了什么?我无法分辨,因为我只是尽力遵循本课程提供的示例指导。

以下是我尝试发送的查询:

"SELECT fr.DepartureLocation, fr.Destination, d.Date, d.Time FROM `FlightRoute` fr,
`Departure` d WHERE d.FlightRouteId = fr.Id AND d.Date > " + dateFrom + " AND
d.Date < " + dateTo + " AND fr.Destination = `" + destination + "`;"

&#34; dateFrom&#34;,&#34; dateTo&#34;和&#34;目的地&#34;是我调用方法的所有参数,我试图将我从此语句得到的结果限制为某个日期范围内的结果以及具有特定目的地的结果。 我可以补充一点,日期是整数排列如下:20131205 这应该使以后的日期更高一些。

我是否以某种方式使用SQL代码的参数错误,或者我是否在这里制作了错误的SQL代码?

非常感谢能够为我提供正确的SQL代码的任何人,以便我可以看到我做错了什么(因为我必须做一些类似工作的SQL语句)! 提前致谢! :)

编辑: 这是我要求的代码,我宣布查询并尝试执行它:

try
{
    ArrayList<Departure> departures = new ArrayList<>();
    Statement stmt = con.createStatement();
    System.out.println("derp0");
    String query = "SELECT fr.DepartureLocation, fr.Destination, d.Date, d.Time FROM FlightRoute fr, Departure d WHERE d.FlightRouteId = fr.Id AND d.Date > " + dateFrom + " AND d.Date < " + dateTo + " AND fr.Destination = `" + destination + "`;";
    System.out.println("derp0.1");
    ResultSet rs = stmt.executeQuery(query);
    System.out.println("derp1");

作为一个简短的解释,sout是检查SQLException发生的位置,我只能说异常发生在&#34; derp0.1&#34;。

之后。

1 个答案:

答案 0 :(得分:1)

我建议进行以下更改:

PreparedStatement ps = connection.prepareStatement(
  "SELECT fr.DepartureLocation, fr.Destination, d.Date, d.Time FROM `FlightRoute` fr,"+
  "`Departure` d WHERE d.FlightRouteId = fr.Id AND d.Date > ? AND d.Date < ? "+
  " AND fr.Destination = ?");

ps.setDate(1, dateFrom);
ps.setDate(2, dateTo);
ps.setString(3, destination); //assuming destination is a String 

ResultSet rs = ps.executeQuery();

在JDBC中,您应该始终使用参数化,如上所述。它也可能解决您的问题,这可能是由无效的日期格式引起的。