- - PR -
javaSQLエラーについて
投稿者 | 投稿内容 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-01-17 00:23
なんだこりゃあ・・・。
PreparedStatementにとって、'?'がどんな意味を持つのかも知らんの? だいたい、ソースも昼間と違ってるじゃない。 独りよがりでいい加減な省略、 質問する尻から手元でソースをいじくって、エラーの原因さえコロコロ変わる。 こんなんで的確なアドバイスができるとしたら、そいつはエスパーか神様だな。 さて、察するに、Statementも使ったこともないのかいな。 では、まずはStatementを使えるようになろう。 こんな感じ。
それと、SQLを扱う場合、Dateはjava.util.Dateでなく、java.sql.Dateを使うこと。 書式で10桁にそろえているのに、なんでわざわざsubstring()が ついているのかわからんのだが。 まあ、java.sql.Dateだったら、toString()だけでよろし。 これとて、明示的な記述は必要ないが。 初心者だったら、ステートメントの途中でString加工を使わんでいい。 それぞれきちんと変数を設けて、文字列の状態を確定から接続すること。 念のため、日付や文字列はシングルクオーテーションで囲まなあかんよ。 いってることが違うって? PreparedStatementじゃないからね。 <追記> もしかして、他の人がSQLの中で使っていた'?'も、 変数名に読み替えていたのかしら・・・。 [ メッセージ編集済み 編集者: さいくろう 編集日時 2006-01-17 01:00 ] | ||||||||||||||||
|
投稿日時: 2006-01-17 09:38
申し訳ございません。
StatementとPreparedStatementをごっちゃになっておりました。 Statementは使用した事がありますよ。 では、改めまして(SQL削減でテーブル名だけをWHERE句に使用してみました) String selectSQL = "SELECT NEXT_ID FROM NEXT_ID_TABLE WHERE (TABLE_NAME =?)"; pstmtSelect = connection.prepareStatement(selectSQL); pstmtSelect.setString(1,tableName); resultSet = pstmtSelect.executeQuery(); と自分なりに新しくしてみましたが出るエラーは変わらずです。 という事はまだ使い方がおかしいのでしょうか??? ・・・追記で書かれている通り?は変数名を伏せていると思っておりました。。 | ||||||||||||||||
|
投稿日時: 2006-01-17 12:11
なんか、文章がつながってないと思ったら、
投稿時刻と編集時刻に開きがありますね。 返信があってから、自分の投稿を書き換えるようなことは、よした方がいいですよ。 第一スレッドもあがらないから気づいてもらえない可能性も高いし。 閑話休題。
どの行で、どんなエラーがでるんですか? | ||||||||||||||||
|
投稿日時: 2006-01-17 15:37
エラーなんですが、以前と同じ
クエリーエラー: 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). と出ております。 エラー箇所は pstmtSelect.setString(1,tableName); で値をセットする段階で出ているようです。 このサイトでのPreparedStatementの使い方を見ていて同じようにセットしているつもりなんですが。。。 すいません。よろしくお願い致します。 | ||||||||||||||||
|
投稿日時: 2006-01-17 15:45
getParameterMetaData メソッドでパラメタ数などをチェックして頂けませんか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||||||||||
|
投稿日時: 2006-01-18 19:45
返信送れて申し訳ございません。
エラーは出るものの自己解決?はできました。 原因ですが、mysql-connector-java がおかしかったみたいです。 mysql-connector-java-3.1.12-bin.jarを実装すると DBには書き込みはできています。 getParameterMetaDataでも値とパラメタ数も取得できているみたいです。 とはいうものの今だに クエリーエラー: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1). 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). と出ておりますがこれは何なんでしょうか。。。 try{ }catch でSQL文を取得している際にSQL文のパラメータを?で実装しているため このエラーが出ているのでしょうか? | ||||||||||||||||
|
投稿日時: 2006-01-19 00:01
どうやって? パラメータをセットしようとすると止まるんでしょ? 「パラメータを含まないSQL文ならPreparedStatementで実行できる」という翻訳で合ってるのか。
さて、これだけだったら、パラメータは1カ所だけなのに、 2カ所目のパラメータをセットしようとしている、と読めるんだがな。
1番目(1個)と、2番目3番目(0個)でパラメータの数が違うじゃない。 それぞれ別のSQLを実行した結果なんだよね。 わたしゃエスパーじゃないので、あんたの手元にどんなコードがあるのか読みとれません。
何の話かよくわからん。 何をどういう風にやってるのか、具体的に書いてもらえんかな。 SQL文中の'?'をワイルドカードと混同してるってことはないと思うが。 [ メッセージ編集済み 編集者: さいくろう 編集日時 2006-01-19 00:42 ] | ||||||||||||||||
|
投稿日時: 2006-01-19 02:01
これから、1番まっとうな解答をしてみる。
勉 強 し よ う よ つか、どんなコードを書いたらどうなるのかがまるでわかっていない。 わからないままで実装しようとするからこうなる。 何も予備知識がないままに料理が作れないのと同じである。 料理を作るのであれば包丁の扱い方を学ぶだろう。 それと同じで勉強という下準備をしなさい。 その上で今までの回答をもう一度みることをお勧めする。 毎回毎回、食材に包丁を入れる時に「できません」「切れません」じゃ話にならんでそう。 解決するために一体何をしてきたというの? ###最後にさいくろう氏には感謝しましょう。 ###パロディの自分が言ってちゃ世話ないんだけど。 |