2016-11-17 48 views
0

DB2 JDBCで実行中の選択照会があります。 Prepared Statementを使用して、パラメータの値を渡します。データベースのそのパラメーターの列の長さは12です。したがって、値の長さが12になるまですべて正常に機能し、失敗します。タイトルのように、エラーメッセージとともに例外をスローします。私はいくつかの検索を行なったし、次のリンクhttp://www-01.ibm.com/support/docview.wss?uid=swg21319477で説明を見つけて、そこに記載された解像度はようDB2 jdbc SQLエラー:SQLCODE = -302、SQLSTATE = 22001選択時

を下回っている問題 の解決よりも大きい値で、クエリを防止するために、追加のクライアント側の検証コードを追加します。最大長の実行が許可されました。

私はこれをしたくありません。なぜクエリが返されず、結果が返ってこないのでしょうか。どのようなアイデアを私はこれについてどうやって行くのですか?

EDIT

String sql = "select student_id, student_name from student where student_id = ?"; 

try (Connection connection = DBUtils.GetConnection) 
{ 
    try (PreparedStatement statement = connection.prepareStatement(sql)) 
    { 
     statement.setString(1, student_id); 

     ResultSet result = statement.executeQuery(); 

     while (result.next()) 
     { 
      //... 
     } 
    } 
} 
+0

あなたはに渡しています文字列または数値ですか?あなたは常に価値を渡していると確信していますか? – xQbert

+0

はい。私は値を渡していることを確信しており、データ型は文字列(dbでvarchar)です。 – Abhi

+0

データベース内でvarchar(12)を使用し、12文字の文字列を渡すと失敗しますか?空白(または非表示文字)を渡している値に12+にしていないことを確かめていますか? 12 = 12だから、うまくいくはずですが、余分な文字が見えない場合は(スペース、他の非表示文字を入力してください)、13を渡すことがあります。私は渡された値の長さを出力し、問題をデバッグするために12を保証します。 – xQbert

答えて

0

私はあなたの質問に答えるつもりです:間違った方法で使用されたデータベース管理システムを含む

Why wouldn't the query just return back with no results. Any idea how do I go about this?

コンピュータプログラムは、何かが間違っていたことを示すためにエラーと警告を使用します紛争や「危険」の可能性のある状況に遭遇した場合。あなたのケースでは、適合しない値で定義されたAPIを呼び出そうとしています。プログラムは、その値を受け入れることを拒否し、エラーコードを返すことによって間違った呼び出しを指摘します。

結果が返されない場合は、API呼び出しの使用方法が間違っていることをどのように知っていますか?今あなたが知っているとそれを修正することができます。または例外処理を使用してそれを無視して移動...

+0

これは全く意味がありません! 「プログラムはその価値を受け入れず、間違った電話を指摘する」間違った呼び出しや値ではなく、ちょうど選択クエリです。同じクエリは、データベースIDEを使用して動作します。これはバグでなければなりません。 – Deepak

0

私はそれを行うことをお勧めしません:私たちは同様の問題を抱えていました - 少なくとも私たちの場合 - もしあなたが本当に空の結果プリペアドステートメントの代わりにネイティブSQLクエリを使用できます。明らかに、それは引数の検証に実行されるprepared statementの引数バインディングです。引数を使用して手動で構築したネイティブクエリは、この検証を回避し、空の結果を返したようです。

(完全期すために:。本当に手動で指定された引数からSQLクエリを構築する場合、あなたは何をしているか知っているあなたの引数を検証し、具体的には、SQLインジェクションに注意してください)

関連する問題