Re: JDBC CallableStatement bug on functions with return parameter
От | John LH |
---|---|
Тема | Re: JDBC CallableStatement bug on functions with return parameter |
Дата | |
Msg-id | 4D4D9056.5070605@aquafold.com обсуждение исходный текст |
Ответ на | Re: JDBC CallableStatement bug on functions with return parameter ("Kevin Grittner" <Kevin.Grittner@wicourts.gov>) |
Список | pgsql-jdbc |
Hi, >> Try using BigDecimal, which *is* capable of storing exact representations of all decimal fractions. In my previous email I mentioned that I also tried BigDecimal and it did not work. >> I've also tried the combination and results of ... >> === >> java.sql.Types.DOUBLE/Double >> org.postgresql.util.PSQLException: ERROR: function public.sales_tax(double precision) does not exist >> === >> java.sql.Types.NUMERIC/BigDecimal >> org.postgresql.util.PSQLException: ERROR: function public.sales_tax(numeric) does not exist I am aware of the approximate datatype issue with Float and Double. The reason I tried Float and Double is because if I call statement.execute("select * from tableWithMoney"), and then call ResultSet.getObject("money_column"), it will actually return a Double datatype. Which is a possible bug in the JDBC driver. I tried Float, Double and BigDecimal. I can't find any documentation indicating what datatype to use. Looking at the JDBC driver code it looks like it is incorrectly converting the SQL. thanks -John On 2/5/2011 9:43 AM, Kevin Grittner wrote: > John LH wrote: > >> callStatement.registerOutParameter(1, java.sql.Types.FLOAT); > >> callStatement.setObject(2, new Float(25.25)); > > PostgreSQL doesn't support using approximate data types (like Float) > for money. Try compiling and running this to see why: > > import java.math.BigDecimal; > public class ExactnessTest > { > public static void main(String[] args) > { > double approximate; > BigDecimal exact; > > // Set an approximation of a penny. > approximate = 0.01; > // Put the actual value into an exact class. > exact = new BigDecimal(approximate); > // Show the actual value assigned to the double. > System.out.println(exact); > // Create and show an exact decimal penny. > exact = new BigDecimal("0.01"); > System.out.println(exact); > } > } > > Try using BigDecimal, which *is* capable of storing exact > representations of all decimal fractions. Note that feeding an > approximate value, including an unquoted literal, to the BigDecimal > constructor will cause the BigDecimal value to be less precise than > you might expect. > > -Kevin >
В списке pgsql-jdbc по дате отправления: