- PR -

javaSQLエラーについて

投稿者投稿内容
さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-01-17 00:23
なんだこりゃあ・・・。
引用:

変数名などでややこしくなるかな。と思い変数名の所を?に置き換えて投稿しておりました。


PreparedStatementにとって、'?'がどんな意味を持つのかも知らんの?
だいたい、ソースも昼間と違ってるじゃない。
独りよがりでいい加減な省略、
質問する尻から手元でソースをいじくって、エラーの原因さえコロコロ変わる。
こんなんで的確なアドバイスができるとしたら、そいつはエスパーか神様だな。

さて、察するに、Statementも使ったこともないのかいな。
では、まずはStatementを使えるようになろう。
こんな感じ。
コード:

Statement stmt = connection.createStatement();
ResultSet set = stmt.executeQuery(selectSQL);


それと、SQLを扱う場合、Dateはjava.util.Dateでなく、java.sql.Dateを使うこと。
書式で10桁にそろえているのに、なんでわざわざsubstring()が
ついているのかわからんのだが。
まあ、java.sql.Dateだったら、toString()だけでよろし。
これとて、明示的な記述は必要ないが。

初心者だったら、ステートメントの途中でString加工を使わんでいい。
それぞれきちんと変数を設けて、文字列の状態を確定から接続すること。

念のため、日付や文字列はシングルクオーテーションで囲まなあかんよ。
いってることが違うって?
PreparedStatementじゃないからね。

<追記>
もしかして、他の人がSQLの中で使っていた'?'も、
変数名に読み替えていたのかしら・・・。

[ メッセージ編集済み 編集者: さいくろう 編集日時 2006-01-17 01:00 ]
ブラッド
会議室デビュー日: 2004/12/26
投稿数: 10
投稿日時: 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();

と自分なりに新しくしてみましたが出るエラーは変わらずです。
という事はまだ使い方がおかしいのでしょうか???

・・・追記で書かれている通り?は変数名を伏せていると思っておりました。。
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2006-01-17 12:11
なんか、文章がつながってないと思ったら、
投稿時刻と編集時刻に開きがありますね。
返信があってから、自分の投稿を書き換えるようなことは、よした方がいいですよ。
第一スレッドもあがらないから気づいてもらえない可能性も高いし。

閑話休題。
引用:

と自分なりに新しくしてみましたが出るエラーは変わらずです。


どの行で、どんなエラーがでるんですか?
ブラッド
会議室デビュー日: 2004/12/26
投稿数: 10
投稿日時: 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の使い方を見ていて同じようにセットしているつもりなんですが。。。

すいません。よろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-01-17 15:45
引用:

ブラッドさんの書き込み (2006-01-17 15:37) より:

エラー箇所は
pstmtSelect.setString(1,tableName);
で値をセットする段階で出ているようです。


getParameterMetaData メソッドでパラメタ数などをチェックして頂けませんか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ブラッド
会議室デビュー日: 2004/12/26
投稿数: 10
投稿日時: 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文のパラメータを?で実装しているため
このエラーが出ているのでしょうか?

さいくろう
大ベテラン
会議室デビュー日: 2005/11/19
投稿数: 170
お住まい・勤務地: 川崎市
投稿日時: 2006-01-19 00:01
引用:

DBには書き込みはできています。


どうやって?
パラメータをセットしようとすると止まるんでしょ?
「パラメータを含まないSQL文ならPreparedStatementで実行できる」という翻訳で合ってるのか。
引用:

クエリーエラー: java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 1).


さて、これだけだったら、パラメータは1カ所だけなのに、
2カ所目のパラメータをセットしようとしている、と読めるんだがな。
引用:

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).


1番目(1個)と、2番目3番目(0個)でパラメータの数が違うじゃない。
それぞれ別のSQLを実行した結果なんだよね。
わたしゃエスパーじゃないので、あんたの手元にどんなコードがあるのか読みとれません。
引用:

try{ }catch でSQL文を取得している際にSQL文のパラメータを?で実装しているため
このエラーが出ているのでしょうか?


何の話かよくわからん。
何をどういう風にやってるのか、具体的に書いてもらえんかな。
SQL文中の'?'をワイルドカードと混同してるってことはないと思うが。

[ メッセージ編集済み 編集者: さいくろう 編集日時 2006-01-19 00:42 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-01-19 02:01
これから、1番まっとうな解答をしてみる。

   勉 強 し よ う よ

つか、どんなコードを書いたらどうなるのかがまるでわかっていない。
わからないままで実装しようとするからこうなる。

何も予備知識がないままに料理が作れないのと同じである。
料理を作るのであれば包丁の扱い方を学ぶだろう。
それと同じで勉強という下準備をしなさい。

その上で今までの回答をもう一度みることをお勧めする。

毎回毎回、食材に包丁を入れる時に「できません」「切れません」じゃ話にならんでそう。
解決するために一体何をしてきたというの?

###最後にさいくろう氏には感謝しましょう。
###パロディの自分が言ってちゃ世話ないんだけど。

スキルアップ/キャリアアップ(JOB@IT)