java中JDBC当中PreparedStatement和Statement的效率比较

PreparedStatement和Statement的效率比较
马克-to-win:前面介绍的Statement接口提供了执行sql语句和获取结果的基本方法。注意对于有种情况,即,需要反复执行相同的sql语句时,Sun公司就为我们提供了另外一种对象:PreparedStatement。它翻译过来就是: “准备好的Statement”。用它的好处就是:当数据库见到PreparedStatement的sql语句时,数据库端直接先到数据库缓冲区当中找它,如找不到,则会编译它一次(就像把java文件编译成class文件似的,请问java文件能直接运行吗?所以你的“UPDATE login SET name = ? WHERE id = ?”也需要编译一下,才能执行)。如能找到,就直接用。下次再遇到,就省事了。而对于Statement对象,就没有这种待遇。次次见,次次编译。
马克- to-win:马克 java社区:防盗版实名手机尾号: 73203。
注意:如果sql语句只执行一次,以后不再复用,则建议采用Statement,因为Statement不会对sql进行预编译。

例:2.2.1
import java.io.IOException;
public class TestMark_to_win {
    public static void main(String[] args) throws java.sql.SQLException,
            ClassNotFoundException, IOException {
        int i = 0;
        java.sql.Connection connection = null;
        java.sql.PreparedStatement pstmt;
        Class.forName("com.mysql.jdbc.Driver");
        connection = java.sql.DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test", "root", "1234");
        pstmt = connection
                .prepareStatement("UPDATE login SET name = ? WHERE id = ?");
        long t = System.currentTimeMillis();
        for(i=0;i<10000;i++) {
            pstmt.setString(1, "qqqq");
            pstmt.setString(2, "2");
            pstmt.executeUpdate();
        }
        t = System.currentTimeMillis() - t;
        System.out.println("用了如下时间:" + t);
        pstmt.close();
        System.out.println("ok");
        connection.close();
    }
}
输出结果:
用了如下时间:4256
ok




import java.io.IOException;
public class TestMark_to_win {
    public static void main(String[] args) throws java.sql.SQLException,
            ClassNotFoundException, IOException {
        int i = 0;
        java.sql.Connection connection = null;
        java.sql.Statement statement;
        Class.forName("com.mysql.jdbc.Driver");
        connection = java.sql.DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/test", "root", "1234");
        statement = connection.createStatement();
        String sqlStringupdate = "UPDATE login SET name = 'qqqq'"+" WHERE id = '2'";
        long t = System.currentTimeMillis();
        for(i=0;i<10000;i++) {
            statement.executeUpdate(sqlStringupdate);
        }
        t = System.currentTimeMillis() - t;
        System.out.println("用了如下时间:" + t);
        statement.close();
        System.out.println("ok");
        connection.close();
    }
}


输出结果:
用了如下时间:6578
ok