SQL问题和问号

问题描述

| 我正在尝试使用PreparedStatemnent执行脚本:
import java.sql.*;

public class DeclaredStatement {

  public static void main(String[] args) throws sqlException {

    try {      
      Class.forName(\"com.MysqL.jdbc.Driver\");
      Connection conn = 
        DriverManager.getConnection(\"jdbc:MysqL://localhost/test\");
      PreparedStatement stmt = conn.prepareStatement(\"\"
        + \"SELECT TITLE FROM MOVIES\"
        + \"WHERE year_made >= ? \"
        + \"and year_made < ?\");

      for (int decadeStart=1920;decadeStart<2000;decadeStart+=10) {
         System.out.println(\"==== Movies of the \" + decadeStart + \"s ====\");
         stmt.setInt(1,decadeStart);
         stmt.setInt(2,decadeStart+10);
         ResultSet rs = stmt.executeQuery();
         while (rs.next()) {
           System.out.println(rs.getString(1)+\" - \"+rs.getInt(2));
         }
      }

    } catch (sqlException e) {
      e.printstacktrace();
    } catch (ClassNotFoundException ex) {
      ex.printstacktrace();
    }

  }

}
错误是:
run:
==== Movies of the 1920s ====
com.MysqL.jdbc.exceptions.jdbc4.MysqLSyntaxErrorException: 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 \'>= 1920 and year_made < 1930\' at line 1
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.MysqL.jdbc.Util.handleNewInstance(Util.java:409)
    at com.MysqL.jdbc.Util.getInstance(Util.java:384)
    at com.MysqL.jdbc.sqlError.createsqlException(sqlError.java:1054)
    at com.MysqL.jdbc.MysqLIO.checkerrorPacket(MysqLIO.java:3566)
    at com.MysqL.jdbc.MysqLIO.checkerrorPacket(MysqLIO.java:3498)
    at com.MysqL.jdbc.MysqLIO.sendCommand(MysqLIO.java:1959)
    at com.MysqL.jdbc.MysqLIO.sqlQueryDirect(MysqLIO.java:2113)
    at com.MysqL.jdbc.ConnectionImpl.execsql(ConnectionImpl.java:2568)
    at com.MysqL.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2113)
    at com.MysqL.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2275)
    at client.DeclaredStatement.main(DeclaredStatement.java:26)
BUILD SUCCESSFUL (total time: 0 seconds)
    

解决方法

        建立查询时,看起来好像在
MOVIES
WHERE
之间没有空格,这将导致
SELECT TITLE FROM MOVIESWHERE year_made...
。     ,        您之后缺少空间
SELECT TITLE FROM MOVIES
WHERE
之前