1

次のコード スニペットで 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)
4

4 に答える 4

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
于 2012-10-16T06:25:19.873 に答える
2

まず、のorder by後に行く必要がありwhereます。

次に、MySQL を使用している場合はdate、型の予約語であるため、引用符で囲む必要がありますDATE。クエリは次のようになります。

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

3 番目に、メソッドを使用して準備済みステートメントが実行されexecuteQuery()ます。ここexecuteQuery(String)で使用されているメソッドは、通常のステートメントを実行するためのものです。たとえば、パラメーターを置換しないため、?そのままデータベースに渡されます。必要なもの:

rs = preparedStatement.executeQuery(/* empty */);
于 2012-10-16T06:28:08.357 に答える
1

order by 句は where 句の後に来る

于 2012-10-16T06:25:47.317 に答える
1

SELECT * FROM cost_info where date > ? and date < ? order by dateあなたの場合の正しいSQLです

于 2012-10-16T06:26:14.180 に答える