2016-10-12 7 views
1

JSONオブジェクトの解析中にSQL例外が発生しました。ここに私のコードスニペットがあります。SQL例外の取得 'NaN'は有効な数値または近似数値ではありません

public JSONArray paymentMode(String stringObjects) throws SQLException { 

    JSONObject jsonObject = JSONFactoryUtil.createJSONObject(); 

    //JSONOBJECT RETURN 
    JSONObject jsonObjectReturn = JSONFactoryUtil.createJSONObject(); 
    JSONObject obj = JSONFactoryUtil.createJSONObject(); 
    JSONArray array = JSONFactoryUtil.createJSONArray(); 
    Session session = null; 
    Connection conn = null; 
    CallableStatement callableStatement = null; 
    try { 
     // test 
     BeanLocator beanLocator = PortletBeanLocatorUtil 
       .getBeanLocator("Mrcos-services-portlet"); 
     BasicDataSource bds = (BasicDataSource) beanLocator 
       .locate("mrcosDataSourceTarget"); 
     conn = (Connection) bds.getConnection(); 

     jsonObject = JSONFactoryUtil.createJSONObject(stringObjects); 

     JSONArray jsonArray = jsonObject.getJSONArray("dataArray"); 


     for (int i = 0; i < jsonArray.length(); i++) { 
      obj = jsonArray.getJSONObject(i); 



     callableStatement = (CallableStatement) conn 
       .prepareCall("{call PaymentModeSPv2(?,?,?,?,?,?,?,?,?,?,?,?,?)}"); 
     callableStatement.setString(1, jsonObject.getString("mode")); 
     callableStatement.setString(2, jsonObject.getString("num1")); 
     callableStatement.setString(3, jsonObject.getString("date1")); 
     callableStatement.setString(4, jsonObject.getString("num2")); 
     callableStatement.setString(5, jsonObject.getString("date2")); 
     callableStatement.setString(6, jsonObject.getString("remarks")); 
     callableStatement.setDouble(7, jsonObject.getDouble("amount")); 
     callableStatement.setString(8, jsonObject.getString("receipt")); 
     callableStatement.setString(9, jsonObject.getString("algo")); 
     callableStatement.setString(10, jsonObject.getString("code")); 
     callableStatement.setString(11, jsonObject.getString("address")); 
     callableStatement.setString(12, jsonObject.getString("status")); 
     callableStatement.registerOutParameter(13, Types.INTEGER); 

     callableStatement.executeQuery(); 

     String xreturn = callableStatement.getString(13); 



     jsonObjectReturn = JSONFactoryUtil.createJSONObject(); 
     jsonObjectReturn.put("xreturn", xreturn); 

     array.put(jsonObjectReturn);  


     System.out.println("jsonObjectReturn : " + jsonObjectReturn); 

     } 
     return array; 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (callableStatement != null) { 
      callableStatement.close(); 
     } 

     if (conn != null) { 
      conn.close(); 
     } 
     closeSession(session); 
    } 

    jsonObjectReturn = JSONFactoryUtil.createJSONObject(); 
    jsonObjectReturn.put("result", "NO RESULTS FOUND!"); 
    return array; 

} 

IはcallableStatement.setDouble(7、jsonObject.getDouble( "量"))でエラーを抱えています。java.sql.SQLException: 'NaN'は有効な数値またはおおよその数値ではありません

金額は、私のデータベースで10です。私はまたdoubleの代わりにfloatを使用しようとしましたが、同じエラーメッセージを返します。私も整数と10進数を渡そうとしましたが、同じエラーが発生します。私はしばらくの間立ち往生してください。ありがとうございました!

+1

が見えます。あなたはそれを見つけるためにデバッガを使用できますか? – Jens

+1

'jsonObject.getDouble(" amount ")'が文字列 '' NaN "'を返し、DBMSはそれを "数字"として解析できないかのように聞こえます。 –

+1

こんにちは。はい私の番号を入力するたびに、私のjsonObject.getDouble( "amount")がNaNを返しています..何をすればいいですか? – chiradee

答えて

0

javascript[NaN][1]jsonObject.getDouble("amount")になります。だから何とかそれに対処する必要があります。例えば。あなたは0またはDouble.NaNに置き換えることができます:「量」属性は番号が含まれていないよう

String amt = jsonObject.getString("amount"); 
Double amount = "NaN".equals(amt) ? Double.NaN : Double.parseDouble(amt); 
callableStatement.setDouble(7, amount); 
+0

Double.isNaNのような特別なメソッドがあります –

+1

この 'JSONObject'がどのようにNaN-sを扱うのか分かりません。おそらく 'Double.isNaN(jsonObject.getDouble(" amount "))? 0:jsonObject.getDouble( "amount") 'も行います。 –

+0

こんにちは@TamasRev、私はあなたの解決策を試みたが、私はまだエラーが発生しました。 ** java.lang.NumberFormatException:空の文字列 \t at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1020) \t at java.lang.Double.parseDouble(Double.java:540)** – chiradee

関連する問題