0

ブレイズを使用してJavaバックエンドに接続するFlexアプリケーションがあります。リモーティングを使用して、APIを呼び出し、Or​​acleデータベースのテーブルで(従来のJDBCクラスを使用して)SELECTステートメントを実行します。

テーブルには2つの列があります。

PRODUCT_CODE of type NVARCHAR2(32) and
DEMAND of type NUMBER(10, 0)

私のJavaAPIは次のとおりです。

public List<?> getQueryResult(String query) {
  Connection conn = DriverManager.getConnection(connStr, userName, password);
  Statement stmt = conn.createStatement();
  ResultSet rs = stmt.executeQuery(query);

  ArrayList<?> result = new ArrayList<?>();
  while(rs.next()) {
    Object[] itemArray = new Object[2];
    itemArray[0] = rs.getObject(1);
    itemArray[1] = rs.getObject(2);
    result.add(itemArray);
  }

  return result;
}

Flex側には、このリモート操作の結果イベントのハンドラーがあります。

private function onResult(e:ResultEvent) : void {
  var result:ArrayCollection = (e.result as ArrayCollection);
}

不思議なことに、DEMAND列に対応する値は自動的に文字列に変換されます(バックエンドでは、これらがBigDecimalであることがわかるようにデバッグしました)

助言がありますか?

4

1 に答える 1

0

はい、確かに、JavaのBigDecimalは、開発者ガイドで読むことができるように、ActionScriptで文字列に変換されます。JBossにはBigDecimalがないため、これが唯一のオプションでした。BigDecimalをintまたはfloatに変換することはできません。

NUMBER(10,0)として表される値の値が-2,147,483,648-2,147,483,647の間隔であることが確実な場合は、Javaでintに変換できます。以下のコードを参照してください。

itemArray[1] = ((BigDecimal)rs.getObject(2)).intValue();
于 2011-01-25T16:17:04.627 に答える