2012-03-12 14 views
1

私はSQLの更新に対して準備済みの文を使用し始めましたが、私は更新しているときに困っているようです。ロジックは健全だと思われますが、更新セグメントに入るたびにエラーが発生します。私は削除または細かい挿入することができます。誰でも...準備文の更新の問題

Connection con = getDBConnection(); 
PreparedStatement pstmt = null; 

String query = "update table set int = ?, String= ? where int= ? and date= ?"; 
pstmt = con.prepareStatement(query); 
pstmt.setInt(1, var); 
pstmt.setDate(2, sqlDate); 
pstmt.setInt(3, intVar); 
pstmt.setString(4, stringVar); 
pstmt.executeUpdate(); 

私はここで何か間違っていますか?私は可能なすべてのトラブルシューティングを行いました。

Error = "A non-numeric character was found where a numeric was expected" 

答えて

2

あなたは間違った方法ラウンドあなたの文字列と日付を持っている - 2番目のパラメータはのコンテキストにあるとき、あなたはsetDate(2, ...)を呼んでいる「=文字列?」 4番目のパラメータが「date =?」のコンテキストにある場合はsetString(4, ...)です。

確かに「pstmt.setWhatever」で、あなたが取得しているエラーはそのためやや奇妙ですが、それは私が見ることができるすべてです...

+0

は、例えば(PARAMTER値である。1,2,3 、4)クエリ文またはデータベースの列配列と相関関係にあるか? 明確化:データベースには4列、abcd ステートメントはacに設定されています。bd ここで、setステートメントはa = 1、c = 2、b = 3、およびd = 4です。 通常、データベースに情報を設定するとき a = 1 b = 2 c = 3 d = 4 ... それが意味をなさないならば。 – cphilpot

+0

@cphilpot:これはSQLに関連しています.setDateなどの最初の引数として指定するインデックスは、SQL *内の位置*です。データベースの列の順序はここでは無関係です。 (INSERT INTO X VALUES(?、?、?、?) 'を実行したことが関係しますが、個人的にはそれは悪い考えです) –

+0

それは私が混乱した場所かもしれません。なぜなら、列番号と相関する挿入文があるからです。あなたの提案を試して、それが修正されているかどうかを確認してください。今日は準備された声明を使い始めました(間違って教えられました)。 – cphilpot