JDBC语句和PreparedStatement

Anonim

在我们跳到差异之前,让我们先了解一下JDBC是什么。

JDBC(Java数据库连接)是一种用于连接和执行数据库查询的Java API。它是数据库独立连接的行业标准,提供通用数据访问,尤其是存储在关系数据库中的数据。它使用用Java编程语言编写的JDBC驱动程序将任何Java应用程序与数据库连接起来。它允许我们即使在异构环境中也可以连接到所有公司数据库。

Statement和PreparedStatement是表示与数据库服务器交互的SQL语句的类。让我们详细讨论它们并解释两者之间的区别。

什么是声明?

Statement是一个JDBC接口,用于对SQL数据库进行通用访问,尤其是在运行时使用静态SQL语句时。

它定义了使用SQL或PL / SQL命令与数据库交互的方法和属性。它用于执行标准SQL语句,如CREATE,UPDATE,RETREIVE和DELET(CRUD)。它作为Java程序和数据库之间的载体工作,但它不能在运行时接受参数,并且它不是预编译的,这意味着不能多次使用相同的SQL语句,这会导致性能低于PreparedStatement。它更容易出现SQL注入。

什么是PreparedStatement?

它是Statement接口的扩展且功能强大的版本,可能会或可能不会参数化,这与Statement不同,它可以采用输入参数来解决更快的性能问题。

它还有助于使用setter方法编写面向对象的代码,这些方法可以提高应用程序的性能。最好的部分是,它通过非SQL二进制通信协议执行,该协议基本上是用于在客户端和服务器之间进行通信的非文本格式,最终减少了带宽使用,从而促进了对服务器的更快通信调用。

简单来说,它是一个表示预编译SQL语句的对象。

JDBC Statement和PreparedStatement之间的区别

基本

JDBC Statement和PreparedStatement是表示用于发送SQL或PL / SQL命令以及从数据库接收数据的SQL语句的类。 Statement接口提供了对数据库执行查询和更改的方法和属性。它是用于通用访问数据库的接口,但它不能接受IN和OUT参数。另一方面,PreparedStatement接口扩展了Statement接口,用于在JDBC中执行预编译的SQL语句,以便可以多次使用相同的SQL语句。

预编译声明

与JDBC语句不同,PreparedStatement是一个预编译语句,这意味着在执行DBMS时,DBMS可以运行SQL语句而无需先编译它。简单来说,语句可以多次运行,而不必每次都编译它。它所做的就是扩展Statement接口并添加使用绑定变量的功能。这样可以更快地执行,尤其是在批量使用时。另一方面,该声明未预先编译,这使其不如PreparedStatement可靠。

输入参数

Statement接口无法在运行时将参数传递给SQL查询,因为它只能用于执行静态SQL语句,并且不能接受输入参数。输入参数是SQL语句中的占位符,用于在存储过程和函数之间交换数据。相反,PreparedStatement接口可以在运行时将参数传递给SQL查询,它可以有一个或多个IN参数,最终允许我们执行动态查询。

二进制通信协议

PreparedStatement通过非SQL二进制通信协议执行,这意味着使用非文本格式来在客户端和服务器之间进行通信,而不是使用效率较低的文本协议。在二进制协议中,数据以二进制形式发送,解析速度快得多,是将客户端连接到服务器的最快速和最有效的方法。这导致更少的带宽使用和更快的服务器通信调用,最终通过重复选择查询加快速度。 Statement接口中没有实现这样的协议。

SQL注入

它指的是可能破坏数据库的注入攻击。它是将恶意代码注入SQL语句以操纵数据库向攻击者泄露内容的最常用技术之一。恶意代码注入应用程序,然后传递到SQL数据库以访问各种资源或更改数据。 PreparedStatement可以抵御SQL注入,因为它使用参数化查询来自动转义特殊字符(如引号)。由于我们在JDBC中使用连接的SQL字符串,因此Statement无法转义SQL注入。

声明与PreparedStatement:比较图表

JDBC语句与PreparedStatement的摘要

JDBC Statement和PreparedStatement接口定义了从SQL数据库发送和接收数据的方法和属性。虽然基本Statement足以执行简单的SQL语句,但很难超越使用PreparedStatement提供的灵活性和好处。虽然Statement接口是用于执行静态SQL语句的通用载体,但PreparedStatement是用于执行动态SQL语句的参数化语句。两者之间的主要区别在于PreparedStatement是一个预编译语句,这意味着可以多次使用相同的SQL命令,这样可以获得更好的性能和更快的结果。