错误是 Sql 语法

Posted

技术标签:

【中文标题】错误是 Sql 语法【英文标题】:Error is Sql syntax 【发布时间】:2012-10-16 06:23:56 【问题描述】:

我在以下代码 sn-p 中遇到 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 子句只是这里的问题之一。你们还能想到什么?? 【参考方案1】:

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

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

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

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

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

【讨论】:

这似乎不是唯一的问题。 是的,这确实是答案。在我的情况下尝试了所有方法:使用所有 PreparedStatement 设置方法更改 DATETIME、DATE 和 TIMESTAMP 之间的列类型。我几乎放弃了。看到您的答案,并将我巧妙命名的列“from”和“to”插入 MySQL Workbench 代码编辑器,并看到它们变为蓝色。哎呀。从。我希望mysql在这样的时刻能更像Captain Obvious。赞成。【参考方案2】:
SELECT * FROM cost_info order by date where date > ? and date < ?

你把order by放在了错误的地方,它应该在查询的最后。

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

【讨论】:

【参考方案3】:

Order by 子句位于 where 子句之后

【讨论】:

【参考方案4】:

SELECT * FROM cost_info where date &gt; ? and date &lt; ? order by date 在您的情况下是正确的 sql

【讨论】:

以上是关于错误是 Sql 语法的主要内容,如果未能解决你的问题,请参考以下文章

错误是 Sql 语法

INSERT INTO 语句的语法错误

JSP向ACCESS插入记录的报SQL语法错误

错误 #1064 - 您的 SQL 语法有错误

SQL语法错误,我不知道正确的语法[关闭]

错误 1064 (42000) : 使用 %s 附近的 SQL 语法有错误