PreparedStatement和Statement的区别

PreparedStatement 和 Statement 的区别:
    1.PreparedStatement在使用时只需要编译一次,就可以运行多次,Statement每运行一次就编译一次,所以PreparedStatement的效率更高
    2.PreparedStatement需要的sql语句为用?(占位符)来替换值,Statement所需要的sql语句为字符串拼接
    3.PreparedStatement解决了sql注入的问题,Statement没有解决,因为PreparedStatement有一个预编译的过程,
    就算传入占位符的数据中有sql关键字也都被认为是值。Statement所需要的是字符串拼接,传入的整个字符串被默认为sql语句,
    如果用户手动拼接了字符串,那么会导致语句的改变
public class JDBCTest04 {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();
        pro.load(new FileReader("src\JDBC.properties"));
        String driver = pro.getProperty("driver");
        String url = pro.getProperty("url");
        String user = pro.getProperty("user");
        String password = pro.getProperty("password");
        Class.forName(driver);
        Connection connection = DriverManager.getConnection(url,user,password);
        ///划重点PreparedStatement/
        //PreparedStatement不同于Statement,在写sql语句时,用?(占位符)来代替值,后期为占位符赋值
        String sql1 = "select * from t_login where username = ?";
        PreparedStatement ps = connection.prepareStatement(sql1);
        //JDBC中下标都是从1开始
        ps.setString(1,"123");
        //在ps.setString中,sql语句就已经存在于ps中,所以在查询或者修改时不需要对其再进行赋值
        ResultSet resultSet = ps.executeQuery();
        ///划重点Statement/
        String sql2 = "select * from t_login where username = " + 123;
        Statement statement = connection.createStatement();
        ResultSet resultSet1 = statement.executeQuery(sql2);
        ///划重点//
        while (resultSet1.next()){
            System.out.println(resultSet1.getString("password"));
        }

    }
}
经验分享 程序员 微信小程序 职场和发展