org.apache.commons.dbcp.BasicDataSource を使用して、スタンドアロン アプリケーションから Oracle 10g データベース (ojdbc14.jar) に接続するために spring-2.5.6 を使用しています。メソッドを使用して SqlRowSet を取得しようとするとpublic SqlRowSet queryForRowSet(String sql, Object[] args) throws DataAccessException
、「java.sql.SQLException: Invalid scale size. ゼロ未満にすることはできません。
テーブルを呼び出すSQLは次のとおりです。
select CUSTAREADESC, BEGCOL, COLLENGTH from CUSTOMERAREA where upper(trim(FLEET)) = upper(trim(?)) and CUSTAREANO = ?
列 BEGCOL および COLLENGTH は、精度が定義されていないデータ型 number です。
この問題に関する情報をいくつか見つけました。これは、Oracle ドライバーと Sun の com.sun.rowset.CachedRowSetImpl の実装との間の非互換性のようです。
Java Database Connectivity (JDBC) - CachedRowSet を設定すると SQLException が生成されます: 無効なスケール サイズ
サブクエリ ファクタリング SQL で queryForRowSet を使用するとエラーが発生する
回避策として、SQL を次のように変更することをお勧めします。
select CUSTAREADESC, (BEGCOL + 0) BEGCOL, (COLLENGTH + 0) COLLENGTH from CUSTOMERAREA where upper(trim(FLEET)) = upper(trim(?)) and CUSTAREANO = ?
列に精度が定義されていない既存のテーブルに対してカスタム sql を使用しない、より優れた一般的なソリューションを知っている人はいますか?