I ran into some unexpected error in the expression:
conn = DriverManager.getConnection("jdbc:hsqldb:mem:test;sql.syntax_ora=true", null);
stmt = conn.prepareStatement("select ? * ? * ? from dual");
stmt.setObject(1, 1000000.00);
stmt.setObject(2, 0.01);
stmt.setObject(3, 3.45);
rs = stmt.executeQuery();
rs.next();
System.out.println(rs.getObject(1));
You can try, the result is 0! What for? Because the hsqldb driver sets the default parameter type for int. 0.01 converted to 0 in JDBCPreparedStatement.java: 4257 o = outType.convertToDefaultType (session, o);
How to change parameter type before / after prepareStatement in jdbc? reflect?
Update: So, I create defineParameterType in JDBCPreparedStatement, as in OraclePreparedStatement
public void defineParameterType(int index, int type)
{
if(index <= 0 || index > parameterTypes.length)
throw new IndexOutOfBoundsException();
Type newType = Type.getDefaultTypeWithSize(type);
if(newType != null)
parameterTypes[index - 1] = newType;
}
But it still returns 0! You must also change the result type or reprocessing request. More details ...
source
share