Java JDBC 代码优化:使用 PreparedStatement 防止 SQL 注入

这段代码展示了如何使用 PreparedStatement 来优化 Java JDBC 代码,防止 SQL 注入,并提高代码可读性和安全性。

原始代码:

try {
    Class.forName(JDBC_DRIVER); // 注册 JDBC 驱动
    conn = DriverManager.getConnection(DB_URL, USER, PASS);
    stmt = conn.createStatement();
    String sql = 'SELECT * FROM rule_kv where model=' + '' + model + '' + ' AND device_name=' + '' + devicename + ''';

    ResultSet rs = stmt.executeQuery(sql);
    // 展开结果集数据库
    while (rs.next()) {
        // 通过字段检索
        operation = rs.getString('operation');
        defaultvalue = rs.getDouble('defaultvalue');
        operation_num = rs.getInt('operation_num');
        //   System.out.println('operation:'+operation+'   defaultvalue:'+defaultvalue+'   operation_num:'+operation_num);
        //判断是否超标产生告警的
        ModelNumInfor(operation, property, defaultvalue, value);
    }
    // 完成后关闭
    rs.close();
    stmt.close();
    conn.close();
} catch (ClassNotFoundException | SQLException e) {
    e.printStackTrace();
}

优化后的代码:

try {
    Class.forName(JDBC_DRIVER); // 注册 JDBC 驱动
    String sql = 'SELECT * FROM rule_kv WHERE model = ? AND device_name = ?';
    try (Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         PreparedStatement stmt = conn.prepareStatement(sql)) {
        stmt.setString(1, model);
        stmt.setString(2, devicename);
        try (ResultSet rs = stmt.executeQuery()) {
            while (rs.next()) {
                String operation = rs.getString('operation');
                double defaultvalue = rs.getDouble('defaultvalue');
                int operation_num = rs.getInt('operation_num');
                ModelNumInfor(operation, property, defaultvalue, value);
            }
        }
    }
} catch (ClassNotFoundException | SQLException e) {
    e.printStackTrace();
}

优化说明:

  • 使用 PreparedStatement 代替 Statement,可以有效防止 SQL 注入攻击。
  • 通过占位符 ? 代替直接拼接字符串的方式构建 SQL 语句,提高代码可读性和安全性。
  • 使用 try-with-resources 语句,确保数据库资源能够及时释放。

总结:

使用 PreparedStatement 是 Java JDBC 代码优化的重要手段,可以有效提高代码的安全性、可读性和可维护性。建议在开发 Java 数据库应用时,优先使用 PreparedStatement 来构建 SQL 语句。

Java JDBC 代码优化:使用 PreparedStatement 防止 SQL 注入

原文地址: https://www.cveoy.top/t/topic/nbhf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录