<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p></p>
讯享网
JDBC(Java Database Connectivity)是Java中用于执行SQL语句的标准API,它提供了一种统一的方式来访问各种关系型数据库。JDBC使得开发者能够以一种独立于具体数据库的方式编写数据库访问代码。
JDBC API:是一组接口和类,定义了与数据库交互所需的方法。
包中的核心接口包括、、、、、等。
包则提供了更高级的功能,比如数据源(DataSource)、连接池管理以及分布式事务支持。
JDBC驱动程序:由特定数据库供应商提供的实现,它实现了 JDBC API。
驱动程序负责将 JDBC 调用转换为针对特定数据库系统的适当网络协议或本地库调用。例如 MySQL、Oracle、PostgreSQL 等都有各自的 JDBC 驱动。
JDBC-ODBC桥:是一个旧的机制,允许通过ODBC驱动来访问数据库。由于性能问题和不再维护的原因,在现代应用中已很少使用。
使用JDBC进行数据库操作通常遵循以下步骤:
- 加载驱动:加载适当的JDBC驱动到内存中。
讯享网
- 创建连接:获取到数据库的连接。
讯享网
- 创建语句:创建一个对象来发送SQL命令。
- 执行查询/更新:执行SQL查询或者更新。
讯享网
- 处理结果集:遍历对象以获取查询结果。
- 关闭资源:关闭、和以释放资源。
讯享网
在早期版本的 JDBC 中,通常需要显式地加载 JDBC 驱动程序,例如:
从 Java 6 开始,JDBC 4.0 引入了服务提供者机制(Service Provider Mechanism),允许自动加载 JDBC 驱动程序。
提供了多种 方法来建立数据库连接:
无参数方法
讯享网
带用户名和密码的方法
带属性的方法
讯享网
使用 来加载驱动程序并建立数据库连接
在使用JDBC与数据库进行交互时,和都是用于执行SQL语句的接口
Statement
- 通过对象的方法创建
- 适用于执行静态的、不包含参数的SQL语句
- SQL语句直接作为字符串传递,并且可以在字符串中插入变量值(这种方式可能导致SQL注入)
讯享网
执行一个SQL查询,根据用户提供的ID查找用户信息
Statement常用对象
ResultSet executeQuery(sql)
执行sql查询语句,并返回ResultSet对象
int executeUpdate(sql)
执行insert,update,delete语句,返回受影响行数
boolean execute(sql)
执行insert,update,delete语句,返回true或false false成功
方法执行更新操作,如插入记录
讯享网
PreparedStatement
- 通过对象的方法创建
- 适用于执行带有参数的SQL语句,这些参数用占位符表示
- 使用作为参数占位符,然后通过方法设置参数值(如, 等)
区别
- 更适合于需要频繁执行的SQL语句,尤其是那些带有参数的查询。它提供了更好的性能、更高的安全性和更简洁的代码结构。
- 适用于简单的、一次性执行的SQL语句。
SQL注入攻击
SQL注入攻击是一种常见的网络安全漏洞,它发生在当应用程序使用用户提供的输入来构造SQL查询,并且没有正确地过滤或转义这些输入时。攻击者可以通过在输入中插入恶意的SQL代码来操纵数据库查询,从而执行非授权的数据库操作,如读取敏感数据、修改数据、删除数据等。
讯享网
这段代码非常容易受到SQL注入攻击,因为直接被嵌入到了SQL语句中。
SQL 注入类型
1、基于错误的 SQL 注入
讯享网
如果字段是唯一的,上面的查询会返回所有记录,因为条件总是为真。如果应用程序抛出了异常并展示了该异常,则可能暴露了关于数据库的信息(通过故意制造一个除以零的错误来获取错误信息)。
2、联合查询注入
讯享网
如果是唯一的,那么联合查询可能会返回所有用户的密码。
3、布尔盲注
当应用程序不会直接返回任何数据但根据查询结果改变行为时(如页面布局变化),攻击者可以通过发送一系列的请求来猜测数据库中的信息。
讯享网
如果查询成功执行并且有结果返回,那么条件为真;反之则为假。
4、时间延迟盲注
当无法从响应内容得知查询结果时,攻击者可以通过使数据库等待一定时间来判断条件是否成立。
讯享网
如果条件为真,那么数据库会暂停5秒后再返回结果。
5、 堆叠查询
某些数据库系统允许多条SQL命令一次执行。攻击者可以利用这一点来执行额外的操作。可能不会有任何直接的数据返回给客户端,但可以在数据库上执行额外的操作,比如删除数据或修改记录。(这些操作可能是破坏性的,也可能用于进一步的信息收集)
讯享网
这个例子中,除了正常的查询外,还附加了一个删除表的命令。如果服务器配置允许堆叠查询,那么将会被执行。
防御措施
对于所有这些类型的SQL注入攻击,**的防御方法是使用参数化查询或预编译语句(PreparedStatement),并确保对所有用户输入进行严格的验证和清理。此外,应该避免向用户显示详细的错误信息,并限制数据库账户的权限,只提供必要的最小权限。
练习使用 JDBC 与 MySQL 数据库进行交互。编写 类
三个方法操作 用户表:
- - 该方法根据给定的用户ID查询单个用户的信息。
- - 该方法查询所有用户,并返回一个包含所有用户的列表。
- - 该方法计算并返回用户表中的总记录数。
实体类
单查询
讯享网
多查询
返回记录数
讯享网
main 方法


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/182913.html