JDBC 基础、CRUD、分页 第一节

这篇博客介绍了JDBC的基础知识,包括JDBC的概念、数据库驱动、操作步骤。详细讲解了Connection、Statement和ResultSet对象的使用,以及如何防止SQL注入。此外,还涉及了数据库的CRUD操作、分页查询、获取自增主键和调用存储过程。
摘要由CSDN通过智能技术生成

JDBC基础知识

JDBC 简介

1.持久化

	把数据保存到可掉电式存储设备中以供之后使用。大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。 持久化的主要应用是将内存中的数据存储在关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。  

2.JDBC概念(Java Database Connectivity)

JDBC(Java Data Base Connectivity)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问,它由一组用 Java 语言编写的类和接口组成。JDBC 提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC 为访问不同的数据库提供了一种统一的路径,为开发者屏蔽了一些细节问题。 
JDBC 的目标是使 Java 程序员使用 JDBC 可以连接任何提供了 JDBC 驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。 

3.数据库驱动

我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的 JDBC 接口实现,即对 Connection 等接口的实现类的 jar 文件。
# JDB

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mmit36uW-1636196187557)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211103095920377.png)]

JDBC 基础

1.操作步骤

前期准备

1、在 mysql 中创建一个库,并创建相应测试表和插入一些测试数据。 	
2、新建一个 Java 工程,并导入 MySQL 数据库驱动包,将 mysql 驱动拷入项目根目录并右键添加到项目依赖(Add As Library)。           

JDBC 操作数据步骤一般分为如下五个步骤:

一、加载数据库驱动类

JDBC 操作数据步骤一般分为如下五个步骤:

二、建立连接(Connection)

Connection connection = DriverManager.getConnection(url,user,password); 

三、创建用于向数据库发送 SQL 的 Statement 对象,并发送 sql

Statement statement = connection.createStatement(); 

四、从结果集的 ResultSet 中取出返回数据。

ResultSet resultSet = statement.excuteQuery(sql);     

五、关闭相关资源,并释放内存

*.close()

案例:

import java.sql.*;

public class Jdbc01 {
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false", "root", "123456");
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("select * from student");
        while (resultSet.next()) {
   
            System.out.println(resultSet.getString(1));
        }
        resultSet.close();
        statement.close();
        connection.close();
    }
}

2.常见驱动类(driver)

全路径一般如下,导入相应的驱动 jar 包后即可加载相应的驱动类:

mysql 驱动 com.mysql.jdbc.Driver

oracle 驱动 oracle.jdbc.driver.OracleDriver

sqlserver 驱动 com.microsoft.jdbc.sqlserver.SQLServerDriver

3.URL:

用于标识数据库的位置,一般由协议、主机、端口和数据库名构成,程序员通过 URL 地址指定 JDBC 程序连接的数据库信息,常见 URL 的写法如下:

Oracle— jdbc:oracle:thin:@localhost:1521:实例ID

SqlServer— jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=databaseName

MySql— jdbc:mysql://localhost:3306/databaseName

MySQL 连接的 url 格式如下,常用参数一般有 characterEncoding=utf-8&useSSL=false

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k3bOKEwP-1636196187561)(C:\Users\admin\AppData\Roaming\Typora\typora-user-images\image-20211103112237821.png)]

注意:如果是连接本地,主机一般填写 127.0.0.1 或 localhost 和省略主机和端口。如果是连接服务器或虚拟机上的数据库服务则填写对应设备的 ip 地址和端口即可。

4.数据库常用对象

在使用 jdbc 过程中经常会使用到如下对象。

4.1.Connection:

Jdbc 程序中的 Connection,它用于代表数据库的连接,Collection 是数据库编程中最重要的一个对象,客户端与数据库所有交互都是通过 Connection 对象完成的,这个对象的常用方法:
 createStatement():创建向数据库发送 sql 的 Statement 对象。
 prepareStatement(sql) :创建向数据库发送预编译 sql 的 PrepareSatement 对象。
 prepareCall(sql):创建执行存储过程的 callableStatement 对象。
 setAutoCommit(boolean autoCommit):设置事务是否自动提交。
 commit() :在链接上提交事务。
 rollback() :在此链接上回滚事务。 

4.2.Statement:

Jdbc 程序中的 Statement 对象用于向数据库发送 SQL 语句, Statement 对象常用方法: 
executeQuery(String sql) :用于向数据发送查询语句。 
executeUpdate(String sql):用于向数据库发送 insert、update 或 delete 语句 
execute(String sql):用于向数据库发送任意 sql 语句 
addBatch(String sql) :把多条 sql 语句放到一个批处理中。 
executeBatch():向数据库发送一批 sql 语句执行。  

4.3.ResultSet:

Jdbc 程序中的 ResultSet 用于代表 Sql 语句的执行结果。Resultset 封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用 resultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
ResultSet 提供检索不同类型字段的方法,常用的有: 
getString(int index)getString(String columnName):通过索引或者字段名获得在数据库里是 varchar、char 等类型的数据对象。 
getFloat(int index)getFloat(String columnName):通过索引或者字段名获得在数据库里是 Float 类型的数据对象。 
getDate(int index)getDate(String columnName):通过索引或者字段名获得在数据库里是 Date 类型的数据。 
getBoolean(int index)getBoolean(String columnName):通过索引或者字段名获得在数据库里是 Boolean 类型的数据。 
getObject(int index)getObject(String columnName):通过索引或者字段名获取在数据库里任意类型的数据。
注意:
ResultSet 的 index 是从 1 开始的,这与我们平时所写代码注意区分。
ResultSet 还提供了对结果集进行滚动的方法: 
previous():移动到前一行 
absolute(int row):移动到指定行 
beforeFirst():移动 resultSet 的最前面。 
afterLast() :移动到 resultSet 的最后面。
注意:释放资源,
Jdbc 程序运行完后,切记要释放程序在运行过程中,创建的那些与数据库进行交互的对象,这些对象通常有 ResultSetStatementConnection 对象。 
释放资源按照“后开先关”原则,顺序如下:ResultSetStatementConnection
为确保资源释放代码能正确运行,资源释放代码在使用 try-catch 时一定要放在 finally 语句中。 

5.SQL 注入与 PreparedStatement

是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为。statement 存在 sql 注入攻击问题,例如登陆用户名采用’ or 1=1 # or 时无论密码是否正确都将登录成功。

import java.sql.*;

public class Jdbc01 {
   
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
   
        Class.forName("com.mysql.jdbc.Driver");
        //String name = "Jack";
        String name = "'or 1=1 #";
        Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false", "root", "123456");
        Statement statement = connection.createStatement();
        ResultSet resultSet = statement.executeQuery("select * from student where studentname='" + name + "' and studentage='20'");
        //最终SQL变成下面这种
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

抹泪的知更鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值