• 数据库连接关闭工具类、Statement介绍、PreparedStatement介绍及区别


    目录

    一、数据库连接和关闭的工具类

    二、Statement介绍及其弊端

    三、PreparedStatement介绍

    四、PreparedStatement与Statement的比较


    一、数据库连接和关闭的工具类

    1. public class JDBCUtils {
    2. public static Connection getConnection() throws Exception{
    3. InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
    4. Properties info = new Properties();
    5. info.load(is);
    6. String url = info.getProperty("url");
    7. String user = info.getProperty("user");
    8. String password = info.getProperty("password");
    9. String driverClass = info.getProperty("driverClass");
    10. Class.forName(driverClass);
    11. Connection connection = DriverManager.getConnection(url, user,
    12. password);
    13. return connection;
    14. }
    15. public static void closeConnection(Connection conn, Statement ps){
    16. try {
    17. if (ps != null) {
    18. ps.close();
    19. }
    20. } catch (SQLException e) {
    21. e.printStackTrace();
    22. }
    23. try {
    24. if (conn != null) {
    25. conn.close();
    26. }
    27. } catch (SQLException e) {
    28. e.printStackTrace();
    29. }
    30. }
    31. }

    二、Statement介绍及其弊端

    ◆ 通过调用Connection对象的createStatement()方法创建该对象。该对象用于执行静态的SQL语
    句,并且返回执行结果

    ◆ Statement接口中定义了下列方法用于执行SQL语句:

    int excuteUpdate(String sql) //执行更新操作INSERT、UPDATE、DELETE
    ResultSet executeQuery(String sql) //执行查询操作SELECT

    ◆ 使用Statement操作数据表存在弊端

    问题一:存在拼串操作,繁琐

    问题二:存在SQL注入问题

    ◆ SQL注入是利用某些系统没有对用户输入的数据进行充分的检查,而在用户输入数据中注入非法的SQL语句段或命令(如:SELECT user, password FROM user_table WHERE user='a' OR 1 = '

    ANDpassword = ' OR '1' = '1') ,从而利用系统的 SQL 引擎完成恶意行为的做法

    ◆ 对于Java而言,要防范SQL注入,只要用PreparedStatement(从Statement扩展而来)取Statement就可以了

    三、PreparedStatement介绍

    ● PreparedStatement接口是Statement的子接口,它表示一条预编译过的 SQL 语句

    ● 可以通过调用Connection对象的preparedStatement(String sql)方法获取PreparedStatement对象

    ● PreparedStatement对象所代表的 SQL 语句中的参数用问号(?)来表示,调用PreparedStatement

    对象的setXxx()方法来设置这些参数,setXxx()方法有两个参数,第一个参数是要设置的 SQL 语句

    中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值

    四、PreparedStatement与Statement的比较

    ● 代码的可读性和可维护性高

    ● PreparedStatement能最大可能提高性能

            DBServer会对预编译语句提供性能优化。因为预编译语句有可能被重复调用,所以语句在被DBServer的编译器编译后的执行代码被缓存下来,那么下次调用时只要是相同的预编译语句就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行

            在statement语句中,即使是相同操作但因为数据内容不一样,所以整个语句本身不能匹配,没有缓存语句的意义,事实是没有数据库会对普通语句编译后的执行代码缓存,这样每执行一次都要对传入的语句编译一次

    ● PreparedStatement可以防止SQL注入

  • 相关阅读:
    MONAI Label 安装流程及使用攻略
    JDK 21的新特性总结和分析
    【29】CISC和RISC:为什么手机芯片都是ARM?
    Shiro安全框架
    S32Kxxx bootloader之UDS bootloader
    处理streamlit库上传的图片文件
    快速解决 Resource not accessible by integration
    kotlin基础教程:<3>函数的高级用法和字符串的基础操作
    使用Spring构建Web应用SpringMVC详解!
    Windows Server 2016使用MBR2GPT.EXE教程!
  • 原文地址:https://blog.csdn.net/m0_61961937/article/details/126931500