java - 错误是Sql语法

标签 java mysql datetime jdbc prepared-statement

我在以下代码片段中收到 SQL 语法错误。这里有什么问题?我想不通。请帮忙。

String selectSQL = "SELECT * FROM cost_info where `date` > ? and `date` < ?  order by `date`";
        PreparedStatement preparedStatement = conn.prepareStatement(selectSQL);

        java.sql.Date sqlFromDate = java.sql.Date.valueOf(from_date);
        java.sql.Date sqlEndDate = java.sql.Date.valueOf(end_date);

        preparedStatement.setDate(1, sqlFromDate );
        preparedStatement.setDate(2, sqlEndDate );
        rs = preparedStatement.executeQuery(selectSQL);

我正在使用 MySQL。错误是:

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 '? and `date` < ?  order by `date`' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1990)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2151)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2569)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1521)
at com.source.viralmo.rms.CostDisplay.initialize(CostDisplay.java:77)
at com.source.viralmo.rms.CostDisplay.<init>(CostDisplay.java:34)
at com.source.viralmo.rms.AdminPage.actionPerformed(AdminPage.java:141)

最佳答案

首先,order by 应该在 where 之后。

其次,如果您使用的是 MySQL,则应引用 date,因为它是 DATE 类型的保留字。查询应该是:

SELECT * FROM cost_info where `date` > ? and `date` < ?  order by `date`

第三,使用executeQuery() 方法执行准备好的语句。此处使用的 executeQuery(String) 方法用于执行普通语句;例如,它不会替换参数,因此 ? 会按原样传递给数据库。你需要:

rs = preparedStatement.executeQuery(/* empty */);

关于java - 错误是Sql语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12908684/

相关文章:

java - Maven 在拥有主类的同时强制使用特定的 Java 版本

java - 我怎样才能为我的结构获得无限数量的项目

mysql - phpMyAdmin 4.0.5 导出错误错误 - 有人知道它是否正在解决吗?

php - Laravel 使用该行的 id 显示一个数据库表中的数据

c# - 如何在 C# 中将时间戳字符串转换为日期

java - 网页中的 GPS 位置

java - 聚合 Spring Data Couchbase 存储库方法 - 如何查询给定属性的所有唯一值的列表?

MySql 基于字段值连接表

mysql - 查看[时间长度]是否可用于多行预订的最佳方法是什么?

javascript - Angular 计时器 - .stop() 和 .resume() 问题