`
hongwei3344661
  • 浏览: 31303 次
  • 性别: Icon_minigender_1
文章分类
社区版块
存档分类
最新评论

jdbc使用预编译的好处

 
阅读更多

在学习数据库编程时,我们都知道在执行SQL命令时,有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。而熟悉JDBC编程的大侠们都会选择使用PreparedStatement对象,主要因为使用预编译对象PreparedStatement时,有以下几个优点:

首先是效率性

 PreparedStatement可以尽可能的提高访问数据库的性能,我们都知道数据库在处理SQL语句时都有一个预编译的过程,而预编译对象就是把一些格式固定的SQL编译后,存放在内存池中即数据库缓冲池,当我们再次执行相同的SQL语句时就不需要预编译的过程了,只需DBMS运行SQL语句。所以当你需要执行Statement对象多次的时候,PreparedStatement对象将会大大降低运行时间,特别是的大型的数据库中,它可以有效的也加快了访问数据库的速度。
其次,使用PreparedStatement对象可以大大提高代码的可读性和可维护性

例如我们在向数据库插入数据:

一种是使用Statement对象

   java.sql.Statement   stmt=conn.createStatement();

  stmt.executeUpdate("insert into student (name,id,number,count) values ('"+var1+"','"+var2+"',"+var3+",'"+var4+"')");
  另一种是使用PreparedStatement对象

String  sql ="insert into student values(null,?,?,?)";

java.sql.PreparedStatement pstmt=conn.preparedStatement(sql);

pstmt.setString(1,var1);
pstmt.setString(2,var2);
pstmt.setString(3,var3);
pstmt.setString(4,var4);
pstmt.executeUpdate();

使用占位符?代替

将参数与SQL语句分离出来,这样就可以方便对程序的更改和延续,同样,也可以减少不必要的错误。

最后就是安全性了。
以下转自百度文库:传递给PreparedStatement对象的参数可以被强制进行类型转换,使开发人员可以确保在插入或查询数据时与底层的数据库格式匹配。

当处理公共Web站点上的用户传来的数据的时候,安全性的问题就变得极为重要。传递给PreparedStatement的字符串参数会自动被驱动器忽略。最简单的情况下,这就意味着当你的程序试着将字符串“D'Angelo”插入到VARCHAR2中时,该语句将不会识别第一个“,”,从而导致悲惨的失败。几乎很少有必要创建你自己的字符串忽略代码。

在Web环境中,有恶意的用户会利用那些设计不完善的、不能正确处理字符串的应用程序。特别是在公共Web站点上,在没有首先通过PreparedStatement对象处理的情况下,所有的用户输入都不应该传递给SQL语句。此外,在用户有机会修改SQL语句的地方,如HTML的隐藏区域或一个查询字符串上,SQL语句都不应该被显示出来。
在执行SQL命令时,我们有二种选择:可以使用PreparedStatement对象,也可以使用Statement对象。无论多少次地使用同一个SQL命令,PreparedStatement都只对它解析和编译一次。当使用Statement对象时,每次执行一个SQL命令时,都会对它进行解析和编译。

分享到:
评论

相关推荐

    java_JDBC预编译相关知识点参照.pdf

    Java JDBC预编译相关知识点详解 预编译语句(PreparedStatement)是Java编程语言中用于与数据库交互的一个重要概念,它是java.sql包中的一个接口,是Statement接口的子接口。预编译语句的设计旨在提高SQL语句的执行...

    MySQL预编译功能

    在 MySQL 中,预编译功能可以通过使用 Prepare 语句来实现。 预编译功能的优点是可以减少 SQL 语句的执行时间,因为在执行 SQL 语句之前,已经对 SQL 语句进行了编译和优化。这样可以减少服务器对 SQL 语句的解析和...

    Java之JDBC连接MySQL数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement)

    Java之JDBC连接数据库实现增删改查(2018 使用Dao层实现 完美封装解决硬编码问题 使用预编译对象PreparedStatement) 配置文件 db.properties(保存数据库账号和密码等) 工具类 JDBCUtil.java(抽取公共部分,解决硬...

    JDBC之PreparedStatement类中预编译的综合应用解析

    PreparedStatement是Java JDBC中用于执行预编译SQL语句的接口,它是Statement的子接口。预编译的SQL语句可以提高数据库操作的性能和安全性。在数据库系统中,预编译意味着SQL语句在首次执行前已经过编译,形成一个...

    jdbc使用参考手册

    - **PreparedStatement对象**:预编译的SQL语句,可防止SQL注入,如`PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users VALUES (?, ?)");`。 - **CallableStatement对象**:用于调用存储过程。 ...

    jdbc 增删改查事物处理, 批处理,以及预编译示例代码

    在Java数据库连接(JDBC)中,增删改查(CRUD)操作是与数据库交互的基础,事务处理、批处理和预编译SQL语句则是提高效率和保证数据一致性的关键技术。以下是对这些概念的详细说明: 1. **JDBC增删改查(CRUD)**:...

    02-JDBC-DAO与预编译语句.xmind

    JDBC进阶1

    一文搞懂MySQL预编译

    本文将深入探讨MySQL预编译的概念、好处、执行过程以及如何在实际应用中使用。 1、预编译的好处 预编译的核心优势在于减少重复工作。在传统的SQL执行流程中,每次执行SQL语句都需要经过语法检查、编译和执行三个...

    《SQL预编译和批量提交对性能提升效果探索》测试代码

    例如,在Java的JDBC中,我们可以使用PreparedStatement对象来实现预编译,它的优点在于减少解析和编译SQL语句的时间,提升执行速度。 接着,我们来讨论批量提交。在传统的数据库操作中,每次插入、更新或删除操作...

    JDBCJDBC高级应用

    使用 `Connection.prepareStatement(String sql)` 创建预编译语句对象,然后使用 `setXXX()` 方法设置参数。 - 预编译语句特别适合于多次执行的SQL,因为它们只需要编译一次。 6. **存储过程的使用**: - 存储...

    Java Web应用开发 34 课堂案例-使用预编译SQL语句.docx

    【Java Web应用开发中的预编译SQL语句】 在Java Web应用开发中,预编译SQL语句(PreparedStatement)是一种高效且安全的方式来执行数据库操作。本案例主要关注如何使用PreparedStatement来添加商品信息到数据库,这...

    sqljdbc和sqljdbc4 sqlserver最新驱动

    在实际使用时,要注意安全最佳实践,比如避免SQL注入,使用预编译的PreparedStatement,及时关闭数据库连接,以及考虑使用连接池以提高性能和资源管理。 7. 兼容性: 这些驱动通常兼容各种SQL Server版本,包括...

    第10章 JDBC-课后习题1

    - 提高性能:预编译的SQL语句可以重复使用,避免了每次执行时的编译过程。 - 防止SQL注入:占位符机制使得参数值与SQL语句结构分离,增加了安全性。 - 支持类型安全:Java方法可以确保参数类型匹配,减少错误。

    Spring Data JDBC与JDBC的区别

    6. **PreparedStatement**: 预编译的SQL语句,具有更好的性能和安全性,常用于动态SQL或多次执行相同的SQL。 7. **CallableStatement**: 用于调用数据库存储过程。 8. **ResultSet**: 存储查询结果,包含多条记录,...

    JDBCDriver3.0.rar_jdbc driver 3.0_sql jdbc 3.0_sql server jdbc_s

    2. **预编译语句(PreparedStatement)**:预编译的SQL语句可以显著提升执行速度,同时防止SQL注入攻击。 3. **批处理操作**:允许多个SQL语句一次性提交,减少网络通信次数,提高整体执行效率。 4. **游标支持**:...

    Accessing-Databases-JDBC

    通过使用预编译查询,可以避免 SQL 注入攻击,并且因为查询只编译一次,所以性能也会有所提高。使用 `PreparedStatement` 类可以实现预编译查询。例如: ```java String sql = "SELECT * FROM Employees WHERE ...

    jdbc jdbc jdbc

    有三种类型:简单`Statement`,预编译的`PreparedStatement`,以及用于调用存储过程的`CallableStatement`。`PreparedStatement`可以提高性能,因为它允许预先编译SQL语句,从而减少解析时间。 4. **结果集...

    JDBC课件,关于JDBC使用

    3. 创建Statement对象,预编译PreparedStatement或准备CallableStatement,根据需求。 4. 执行SQL语句,获取ResultSet。 5. 处理ResultSet,提取数据。 6. 关闭ResultSet、Statement和Connection,释放资源。 总的...

    Oracle12C JDBC 驱动

    在开发过程中,还需要注意兼容性和性能优化,例如选择合适的JDBC批处理大小,使用预编译的SQL语句避免解析开销,以及正确处理异常以避免资源泄露。了解Oracle12C的JDBC驱动特性以及如何有效利用它们,对于开发高效、...

    jdbc完整流程使用

    对于经常执行的SQL语句,使用`java.sql.PreparedStatement`可以提高效率,因为它允许预编译SQL语句。例如: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable VALUES (?, ?)"); ...

Global site tag (gtag.js) - Google Analytics