gpt4 book ai didi

java - hsqldb PreparedStatement参数类型

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:22 26 4
gpt4 key购买 nike

我在表达式结果中遇到了一些意想不到的错误:

  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); // setDouble no difference
rs = stmt.executeQuery();
rs.next();
System.out.println(rs.getObject(1));

你可以试试,结果是0!为什么?因为 hsqldb 驱动程序将默认参数类型设置为 int。0.01在JDBCPreparedStatement.java中转换为0:4257 o = outType.convertToDefaultType(session, o);

如何改变jdbc中prepareStatement前后的参数类型?反射(reflect)?

更新:因此,我在 JDBCPreparedStatement 中创建了 defineParameterType,就像在 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;
}

但是,它仍然返回 0!还需要更改结果类型或重新分析查询。进一步挖掘...

最佳答案

我发现没有源代码破解的唯一解决方案是

select CAST(? AS DOUBLE) * CAST(? AS DOUBLE) * CAST(? AS DOUBLE) from dual

关于java - hsqldb PreparedStatement参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27113372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com