簡體   English   中英

SQL 和問號問題

[英]Problem with SQL and question mark

我正在嘗試使用 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)

構建查詢時, MOVIESWHERE之間似乎沒有空格,這將導致SELECT TITLE FROM MOVIESWHERE year_made...

您在之后缺少空間

SELECT TITLE FROM MOVIES

WHERE之前

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM