Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java(eclipse)时出现SQL语法错误_Java_Mysql_Sql_Eclipse - Fatal编程技术网

使用java(eclipse)时出现SQL语法错误

使用java(eclipse)时出现SQL语法错误,java,mysql,sql,eclipse,Java,Mysql,Sql,Eclipse,我正在使用JavaEclipse和mySQL工作台彼此连接。现在我正在使用java编写一些查询代码,但是在一个查询问题中遇到了一个特定的问题,这个问题有一个我不熟悉的错误,这是我在执行了两个运行良好的sql查询后第一次遇到的问题。感谢您的帮助。我将列出代码,然后跟进一个错误 public static void stopTimes() throws SQLException { stmt = conn.createStatement(); System.out.print

我正在使用JavaEclipse和mySQL工作台彼此连接。现在我正在使用java编写一些查询代码,但是在一个查询问题中遇到了一个特定的问题,这个问题有一个我不熟悉的错误,这是我在执行了两个运行良好的sql查询后第一次遇到的问题。感谢您的帮助。我将列出代码,然后跟进一个错误

public static void stopTimes() throws SQLException
    {
    stmt = conn.createStatement();
    System.out.println("Enter Route Number: ");
    String route = scan.nextLine();
    System.out.println("Direction?");
    String dir = scan.nextLine();
    System.out.println("Enter the first stop number:");
    String stop1 = scan.nextLine();
    System.out.println("Enter the second stop number:");
String stop2 = scan.nextLine();      
String sql;

  sql = "SELECT DISTINCT bus_stops.stopID, street1, street2 FROM bus_stops INNER JOIN scheduled_stops ON bus_stops.stopID = scheduled_stops.stopID"+
              "WHERE scheduled_stops.routeNumber = '"+route+"' "+
              "AND scheduled_stops.direction = '"+dir+"' "+
              "AND scheduled_stops.stopTime > (SELECT stopTime FROM scheduled_stops WHERE scheduled_stops.stopID = '"+stop1+"' ORDER BY scheduled_stops.stopTime asc limit 1)"+ 
              "AND scheduled_stops.stopTime < (SELECT stopTime FROM scheduled_stops WHERE scheduled_stops.stopID = '"+stop2+"' ORDER BY scheduled_stops.stopTime asc limit 1)";


      ResultSet rs = stmt.executeQuery(sql);

      //STEP 5: Extract data from result set
      while(rs.next()){
         //Retrieve by column name
         String stopID  = rs.getString("stopID");
         String street1 = rs.getString("street1");
         String street2 = rs.getString("street2");
         String stopTime = rs.getString("stopTime");

         //Display values
         System.out.print("Stop ID: " + stopID);
         System.out.print(", Name: " + street1 + "/" +street2);
         System.out.println(", Time: " + stopTime);
      }

}

java.sql.SQLException: You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near'
scheduled_stops.routeNumber = '051' AND scheduled_stops.direction = 'Northbound''
at line 1
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2975)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1600)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1695)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3020)
at com.mysql.jdbc.Connection.execSQL(Connection.java:2949)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:959)
at TransitManager.stopsOnRoute(TransitManager.java:460)
at TransitManager.main(TransitManager.java:104)

检查sql字符串在第一行和第四行末尾是否缺少空格。

在stopID和WHERE之间缺少空格。

生成查询时,请记住一点,首先在sql shell或工具中运行它,然后在代码中使用适当的间距和字符串操作实现它

 sql = "SELECT DISTINCT bus_stops.stopID, street1, street2 FROM bus_stops INNER JOIN scheduled_stops ON bus_stops.stopID = scheduled_stops.stopID"+
                  " WHERE scheduled_stops.routeNumber = '"+route+"' "+
                  " AND scheduled_stops.direction = '"+dir+"' "+
                  " AND scheduled_stops.stopTime > (SELECT stopTime FROM scheduled_stops WHERE scheduled_stops.stopID = '"+stop1+"' ORDER BY scheduled_stops.stopTime asc limit 1)"+ 
                  " AND scheduled_stops.stopTime < (SELECT stopTime FROM scheduled_stops WHERE scheduled_stops.stopID = '"+stop2+"' ORDER BY scheduled_stops.stopTime asc limit 1)";

正确使用空格。试试这个:

sql = "SELECT DISTINCT bus_stops.stopID, street1, street2 FROM bus_stops INNER JOIN scheduled_stops ON bus_stops.stopID = scheduled_stops.stopID "+
              "WHERE scheduled_stops.routeNumber = '"+route+"' "+
              "AND scheduled_stops.direction = '"+dir+"' "+
              "AND scheduled_stops.stopTime > (SELECT stopTime FROM scheduled_stops WHERE scheduled_stops.stopID = '"+stop1+"' ORDER BY scheduled_stops.stopTime asc limit 1) "+ 
              "AND scheduled_stops.stopTime < (SELECT stopTime FROM scheduled_stops WHERE scheduled_stops.stopID = '"+stop2+"' ORDER BY scheduled_stops.stopTime asc limit 1)";

问题在于您正在进行的sql查询,在将其添加到java代码之前,请尝试使用phpmyadmin或mysql workbench进行测试。在查询的每行末尾添加空格。好的,谢谢您的评论。在测试mySQL workbenchAppreciated时,我会更小心使用空格,我会小心使用空格感谢评论,我确实会注意空格