详见:
http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp20
JAVA_JDBC预编译 相关知识点
什么是预编译语句?
预编译语句PreparedStatement是java.sql中的一个接口,它是Statement的子接口。通过Statement对象执行sql语句时,需要将sql语句发送给DBMS,由DBMS首先进行编译再执行(在创建通道的时候并不进行sql的编译工作,事实上也无法进行编译)。而通过PreparedStatement不同,在创建PreparedStatement对象时就指定了sql语句,该语句立即发送给DBMS进行编译,当该语句被执行时,DBMS直接运行编译后的sql语句,而不需要像其他sql语句那样首先将被编译。
什么时候使用预编译语句?
当语句格式固定的时我们倾向于使用PreparedStatement,只有当语句格式无法预见时,才考虑使用Statement。
一般在考虑反复使用一个sql语句时才使用预编译,预编译语句常常放在一个循环中使用(在这种情况下预编译的优势就很明显了),通过反复设置参数从而达到多次使用该语句;还有一个原因就是防止sql注入漏洞。
为什么使用预编译语句?
1、提高效率
当需要数据库进行数据插入、更新或者删除的时候,程序给发送整个sql语句给数据库处理和执行。数据库处理一条sql语句,需要完成对sql语句的解析、检查语法以及生成代码;一般来说,处理时间要比执行sql的时间长。预编译语句在创建的时候就已经将sql语句发送给了DBMS,完成了解析、检查语法以及生成代码的过程。因此,当一个sql语句需要执行多次时,使用预编译语句可以减少处理时间,提高执行效率。
2、提高安全性
恶意的sql语句
String sql = “select * from user_tb where username= ‘”+username+”’ and password = ‘”+password+”’;
如果我们把[‘or’1’=’1]作为password传入,用户名随意,那么就可以随意登陆了。更有甚者,把[‘;drop table user_tb;]作为password传入,这就严重危害了数据库安全了。而如果你使用预编译语句,你传入的任何内容就不会和原来的语句发生任何匹配的关系,只要全是用预编译语句,你就用不着对传入的数据进行任何的过滤。(暂时没想明白,个人认为过滤还是需要的)
分享到:
相关推荐
Java JDBC预编译相关知识点详解 预编译语句(PreparedStatement)是Java编程语言中用于与数据库交互的一个重要概念,它是java.sql包中的一个接口,是Statement接口的子接口。预编译语句的设计旨在提高SQL语句的执行...
PreparedStatement是Java JDBC中用于执行预编译SQL语句的接口,它是Statement的子接口。预编译的SQL语句可以提高数据库操作的性能和安全性。在数据库系统中,预编译意味着SQL语句在首次执行前已经过编译,形成一个...
MySQL 预编译功能 MySQL 预编译功能是指在执行 SQL 语句之前,对 SQL 语句进行编译和优化,以提高执行效率。在 MySQL 中,预编译功能可以通过使用 Prepare 语句来实现。 预编译功能的优点是可以减少 SQL 语句的...
6. JDBC预编译语句(PreparedStatement): 预编译语句可以防止SQL注入攻击,提高执行效率,因为它只需要解析一次SQL语句,后续的多次执行只是传入参数值。 7. JDBC批处理: 批处理允许一次性发送多个SQL语句,...
在Java数据库连接(JDBC)中,增删改查(CRUD)操作是与数据库交互的基础,事务处理、批处理和预编译SQL语句则是提高效率和保证数据一致性的关键技术。以下是对这些概念的详细说明: 1. **JDBC增删改查(CRUD)**:...
Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...
5. **JDBC预编译语句与Callable语句** 预编译语句(PreparedStatement)可以防止SQL注入,提高执行效率,并允许参数化查询。Callable语句则用于调用存储过程。这部分可能涵盖: - 如何创建和执行预编译语句,包括...
例如,在Java的JDBC中,我们可以使用PreparedStatement对象来实现预编译,它的优点在于减少解析和编译SQL语句的时间,提升执行速度。 接着,我们来讨论批量提交。在传统的数据库操作中,每次插入、更新或删除操作...
MySQL预编译是一种提高数据库操作效率的技术,尤其在处理大量重复SQL语句时效果显著。预编译的主要目的是减少语法检查和编译的开销,从而提升数据库的性能。本文将深入探讨MySQL预编译的概念、好处、执行过程以及...
JDBC进阶1
在Java的JDBC编程中,`PreparedStatement`是一个非常重要的接口,它提供了预编译的SQL语句功能,能够显著提高执行效率,尤其是在批量处理大量数据时。`PreparedStatement`也被称为JDBC存储过程,因为它允许开发者...
使用 `Connection.prepareStatement(String sql)` 创建预编译语句对象,然后使用 `setXXX()` 方法设置参数。 - 预编译语句特别适合于多次执行的SQL,因为它们只需要编译一次。 6. **存储过程的使用**: - 存储...
4. `PreparedStatement`是`Statement`的子接口,用于执行预编译的SQL语句。 5. `ResultSet`接口中定义了大量的`getXXX()`方法,如果使用字段的索引来获取指定的数据,字段的索引是从1开始编号的。 【判断题】 1. ...
6. **PreparedStatement**: 预编译的SQL语句,具有更好的性能和安全性,常用于动态SQL或多次执行相同的SQL。 7. **CallableStatement**: 用于调用数据库存储过程。 8. **ResultSet**: 存储查询结果,包含多条记录,...
2. **预编译语句(PreparedStatement)**:预编译的SQL语句可以显著提升执行速度,同时防止SQL注入攻击。 3. **批处理操作**:允许多个SQL语句一次性提交,减少网络通信次数,提高整体执行效率。 4. **游标支持**:...
使用mindmaster打开
在实际使用时,要注意安全最佳实践,比如避免SQL注入,使用预编译的PreparedStatement,及时关闭数据库连接,以及考虑使用连接池以提高性能和资源管理。 7. 兼容性: 这些驱动通常兼容各种SQL Server版本,包括...
有三种类型:简单`Statement`,预编译的`PreparedStatement`,以及用于调用存储过程的`CallableStatement`。`PreparedStatement`可以提高性能,因为它允许预先编译SQL语句,从而减少解析时间。 4. **结果集...
预编译SQL语句,也称为PreparedStatement,是Java JDBC提供的一种优化机制,主要解决动态SQL执行时的性能问题和防止SQL注入攻击。 在案例中,首先我们看到一个名为`pre_insert.jsp`的JSP文件,它是用于处理用户提交...
预编译SQL语句,也称为PreparedStatement,是Java数据库连接(JDBC)中的一个重要特性,它提供了一种更安全、高效的方式来执行多次运行的SQL语句。以下是关于这个主题的详细知识点: 1. **PreparedStatement对象...