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 位传输。 Stringlength 再加上许多字符。另外,服务器必须对其进行解析和解码(可能是long)。

首先,我想知道您实际上是如何测量这里的时间的。创建一个没有意义的基准真的很容易。

其次,除了 "setDate" 和 "setString" 之外,您还有很多事情要做 - 有些是客户端,有些是服务器端。

对于您的 "setDate" 示例,您也在执行 java.sql.Date.valueOf("2003-06-17")`,因此您也在测量将字符串转换为日期的开销客户。

对于您的 "setString" 示例,您的 sql 语句包含 "TO_DATE(?,'yyyy-MM-dd')",所以您再次测量字符串到日期的转换,但这次是在服务器端(在数据库中)。

因此,我认为您是在将苹果与橙子进行比较,而且可能不太准确。