- - PR -
javaSQLエラーについて
1|2|3
次のページへ»
投稿者 | 投稿内容 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-16 18:15
はじめまして。
環境ですが、ECLIPSE3.0、TOMCAT4.1、MYSQL4.0.18、J2SDK1.4.2_04を使用して開発を行っております。 症状なのですが、javaでSQL文を実行すると(エラー部抜粋) クエリーエラー: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). SQLエラー: Parameter index out of range (1 > number of parameters, which is 0). java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0). と出て検索を表示できないのですが、 コマンドプロンプトよりMYSQLを実行ごMYSQL上で同じSQL文を実行すると検索はできるのですがなぜjava側で実行するとエラーで実行できないんでしょうか・・・? SQL文は "SELECT NEXT_ID FROM NEXT_ID_TABLE WHERE ((TABLE_NAME='"+?+"') AND(START_DATE<='"+?+"'"+AND END_DATE>='"+?+"'))"; です。よろしくお願い致します。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-01-16 18:39
エラーがどこで発生しているのか、よく確認しましょう。
SQLを実行する時点じゃなく、 PreparedStatementに、パラメータを設定している時点で発生していますよね。
これでやってみてください。 [ メッセージ編集済み 編集者: Edosson 編集日時 2006-01-16 18:39 ] | ||||||||||||||||||||||||||||
|
投稿日時: 2006-01-16 18:52
早速の返信ありがとうございます。
記載されていた通りSQLを実行する場面でなく値をセットする段階でエラーが出ているようです。(executeQuery()まで通っていませんでした。) 教えて頂いた通り、シングルクォーテーションを外してみても同じエラーがでております。。。 PreparedStatement pstmtSelect=null; ResultSet resultSet=null; String selectSQL = "SELECT NEXT_ID FROM NEXT_ID_TABLE " + "WHERE ((TABLE_NAME = " + ? + ")" + "AND (START_DATE<="+?+" AND "END_DATE>="+?+"))"; pstmtSelect = connection.prepareStatement(selectSQL); pstmtSelect.setString(1,?); pstmtSelect.setString(2,?); pstmtSelect.setString(3,?); resultSet = pstmtSelect.executeQuery(); なんですが、PreparedStatementの使い方が間違っているのでしょうか? すいませんがよろしくお願い致します。。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-01-16 19:02
はい。まちがってます。 Edosson さんが書いた通り、手を加えずにそのままま書いてみてください。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-01-16 21:19
コンパイラ、通ってるの? | ||||||||||||||||||||||||||||
|
投稿日時: 2006-01-16 21:49
手を加えずにといいますと、
PreparedStatement pstmtSelect=null; ResultSet resultSet=null; String selectSQL = "SELECT NEXT_ID FROM NEXT_ID_TABLE " + "WHERE ((TABLE_NAME = " + ? + ")" + "AND (START_DATE<="+?+" AND "END_DATE>="+?+"))"; pstmtSelect = connection.prepareStatement(selectSQL); resultSet = pstmtSelect.executeQuery(); でよろしいんでしょうか? ダブルクォーテーションはいらないんでしょうか? つけませんと Unknown column とでますので TABLE_NAME='?' としますと今度は先程と同じエラーがでてしまいます。 まだPreparedStatementの使い方が間違っているのでしょうか? なかなか苦戦しており大変申し訳ありません。 よろしくお願いします。 | ||||||||||||||||||||||||||||
|
投稿日時: 2006-01-16 22:16
どこが?
だから、これで、コンパイラを通るの?
パラメータを設定しなかったら、エラーにもなるでしょ。
面倒がらないで、ちゃんとコピペしなさい。 そっちの手元でいじくってるのと投稿内容が食い違っているようでは、時間の無駄。
Edosson氏の投稿のどこにシングルクオーテーションやダブルクオーテーションが見えるの。
自分のタイプミスを疑いなさい。 SQL文のフィールド名をチェックする。
これが一番大事なんだが、一度に考えることはひとつだけにする。 [ メッセージ編集済み 編集者: さいくろう 編集日時 2006-01-16 22:18 ] | ||||||||||||||||||||||||||||
|
投稿日時: 2006-01-16 23:53
申し訳ございませんでした。SQL以下のソースを載せますのでよろしくお願い致します。
String selectSQL = "SELECT NEXT_ID FROM NEXT_ID_TABLE " + "WHERE ((TABLE_NAME = ? ) AND (START_DATE<= ? AND END_DATE>= ? ))"; pstmtSelect = connection.prepareStatement(selectSQL); pstmtSelect.setString(1,tableName); pstmtSelect.setString(2,accessDateTime.substring(0,10)); pstmtSelect.setString(3,accessDateTime.substring(0,10)); resultSet = pstmtSelect.executeQuery(); [ メッセージ編集済み 編集者: ブラッド 編集日時 2006-01-17 09:12 ] |
1|2|3
次のページへ»