我在Oracle JDBC中有关于setString()和setDate()的一些问题。当我尝试做一些关于setString()和setDate()的测试时,我发现在大多数情况下,setDate()比setString()更快。 有人可以帮我解释一下吗? 这里我的测试:Oracle JDBC中的setString()和setDate()的性能?
private void doSelectTest()
{
System.out.println("[OUTPUT FROM SELECT]");
//String query = "SELECT LAST_NAME FROM Employees WHERE HIRE_DATE = ?";
String query = "SELECT LAST_NAME FROM Employees WHERE HIRE_DATE = TO_DATE(?,'yyyy-MM-dd')";
try
{
PreparedStatement st = conn.prepareStatement(query);
//st.setDate(1,java.sql.Date.valueOf("2003-06-17"));
st.setString(1,"2003-06-17");
ResultSet r = st.executeQuery();
System.out.println(query.toString());
}
catch (Exception ex)
{
System.err.println(ex.getMessage());
}
}
感谢您的帮助。
请备份您的声明*“setDate()比一些数据快于setString()”*。我希望从表中读取记录的行为是表现的主要部分。如果没有'HIRE_DATE'上的索引,那就意味着全表扫描,并且这比发送参数为Date或String的性能差异要慢得多。 – Andreas
您是否了解问题?我正在使用同一张表进行查询。我跳过所有涉及索引,分区等的性能。我只是想在setDate和setString中提前准备。 –
是的,我理解问题,并且我期望Date和String之间的性能差别与执行查询时发生的任何其他事情相比可以忽略不计,*除非它影响访问计划,即阻止使用索引。您没有提供足够的信息来推测这一点,因此我要求提供您的声明的证据,以便我们可以看到您需要支持哪些数字。除非我们知道他们是什么,否则我们无法帮助解释您的数字。 – Andreas