我在Oracle JDBC中遇到有关setString()和setDate()的问题。当我尝试对setString()和setDate()进行一些测试时,我发现 setDate()在大多数情况下比setString() 更快。 有人可以帮我解释一下吗? 在这里我的测试:
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());
}
}
感谢您的帮助。
答案 0 :(得分:3)
首先,我想知道你是如何实际测量时间的。创建一个没有意义的基准很容易。
其次,除了" setDate"之外,你还有很多事情要做。和" setString" - 其中一些是客户端,有些是服务器端。
为你的" setDate"例如,您还在执行java.sql.Date.valueOf(" 2003-06-17")`,因此您还要测量在客户端上将String转换为Date的开销。
对于你的" setString"例如,您的sql语句包含" TO_DATE(?,' yyyy-MM-dd')",所以再次,您正在测量字符串到日期的转换,但这次是服务器端(在数据库中)。
所以,我认为你将苹果与橙子进行比较,可能不太准确。
答案 1 :(得分:0)
Date
通常由单个long
值表示。因此可以将其转换为64位。 String
是length
加上多个字符。此外,服务器必须解析和解码它(可能是long
)。