Oracle JDBC 中 setString() 和 setDate() 的性能?
Performance of setString() and setDate() in Oracle JDBC?
我对 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());
}
}
感谢您的帮助。
A Date
通常由单个 long
值表示。因此它可以作为 64 位传输。 String
是 length
再加上许多字符。另外,服务器必须对其进行解析和解码(可能是long
)。
首先,我想知道您实际上是如何测量这里的时间的。创建一个没有意义的基准真的很容易。
其次,除了 "setDate" 和 "setString" 之外,您还有很多事情要做 - 有些是客户端,有些是服务器端。
对于您的 "setDate" 示例,您也在执行 java.sql.Date.valueOf("2003-06-17")`,因此您也在测量将字符串转换为日期的开销客户。
对于您的 "setString" 示例,您的 sql 语句包含 "TO_DATE(?,'yyyy-MM-dd')",所以您再次测量字符串到日期的转换,但这次是在服务器端(在数据库中)。
因此,我认为您是在将苹果与橙子进行比较,而且可能不太准确。
我对 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());
}
}
感谢您的帮助。
A Date
通常由单个 long
值表示。因此它可以作为 64 位传输。 String
是 length
再加上许多字符。另外,服务器必须对其进行解析和解码(可能是long
)。
首先,我想知道您实际上是如何测量这里的时间的。创建一个没有意义的基准真的很容易。
其次,除了 "setDate" 和 "setString" 之外,您还有很多事情要做 - 有些是客户端,有些是服务器端。
对于您的 "setDate" 示例,您也在执行 java.sql.Date.valueOf("2003-06-17")`,因此您也在测量将字符串转换为日期的开销客户。
对于您的 "setString" 示例,您的 sql 语句包含 "TO_DATE(?,'yyyy-MM-dd')",所以您再次测量字符串到日期的转换,但这次是在服务器端(在数据库中)。
因此,我认为您是在将苹果与橙子进行比较,而且可能不太准确。