【问题标题】:java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended with WHERE clausejava.sql.SQLSyntaxErrorException: ORA-00933: SQL 命令没有以 WHERE 子句正确结束
【发布时间】:2018-08-20 23:27:46
【问题描述】:

我正在尝试使用 WHERE 子句在我的 Oracle 数据库中执行查询:

java.sql.Date today = new java.sql.Date(System.currentTimeMillis());

String sql = new StringBuilder("SELECT *")
                    .append("FROM USERNAME.MY_TABLE m")
                    .append("WHERE m.A_DATE_COLUMN = ?").toString();

PreparedStatement ps = con.prepareStatement(sql);
ps.setDate(1, today);
ResultSet rs = ps.executeQuery();

但我不断收到错误:

SQL 命令未正确结束

executeQuery() 被调用时。我知道这与设置我的参数有关,因为如果我不包含 WHERE 子句,查询运行良好并返回正确的数据。我正在查询的表只有一列类型为 DATE。

我尝试使用setString 而不是setDate,并在我用来创建查询的字符串中的? 之后添加分号,但我的理解是我不想包含分号。

【问题讨论】:

  • 调试是程序员工作的一部分。你有没有试过在执行之前输出字符串???我可以从字符串中看出你错过了空格。
  • 不相关,但是:对常量字符串使用 StringBuilder 是没用的。
  • 您在字符串中的* 之后和FROM 之前缺少一个空格。

标签: sql oracle


【解决方案1】:

需要加空格:

String sql = new StringBuilder("SELECT * ")
                    .append("FROM USERNAME.MY_TABLE m ")
                    .append("WHERE m.A_DATE_COLUMN = ? ").toString();

【讨论】:

    【解决方案2】:

    追加后,您的查询如下所示。

    SELECT *FROM USERNAME.MY_TABLE mWHERE m.A_DATE_COLUMN = ?
    

    正确添加空格。

    String sql = new StringBuilder("SELECT * ")
                    .append("FROM USERNAME.MY_TABLE m ")
                    .append("WHERE m.A_DATE_COLUMN = ?").toString();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 2010-11-22
      相关资源
      最近更新 更多