JDBC01

本文详细介绍了JDBC的概念、本质,以及JDBC的快速入门程序,包括DriverManager、Connection、Statement和ResultSet等核心类的使用。通过JDBC实现了student表的CRUD操作,并探讨了SQL注入攻击及其防范措施,最后讲解了PreparedStatement的使用和事务管理在综合案例中的应用。
摘要由CSDN通过智能技术生成

JDBC-01-授课笔记

一、JDBC快速入门

1.jdbc的概念

 

 

JDBC(Java DataBase Connectivity,java数据库连接),说白了,就是通过咱们的java程序连接数据库的,是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。

2.jdbc的本质

  • 其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接!

 

3.jdbc的快速入门程序

 

 

导入jar包:java官方只是提供了一套规范,至于具体的实现还是由各个数据库厂商自己来实现的  

 

 

 

 

注册驱动

Class.forName("com.mysql.jdbc.Driver");

获取连接

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2", "root", "root");

获取执行者对象

Statement stat = con.createStatement();

执行sql语句,并接收返回结果

String sql = "SELECT * FROM user";
ResultSet rs = stat.executeQuery(sql);

处理结果

while(rs.next()) {
    System.out.println(rs.getInt("id") + "\t" + rs.getString("name"));
}

释放资源

con.close();
stat.close();
rs.close();

二、JDBC各个功能类详解

 

1.DriverManager

  • DriverManager:驱动管理对象功能类

    • 注册驱动(告诉程序该使用哪一个数据库驱动)

      • static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager (该方法是DriverManager类中的静态方法)

      • 写代码使用:Class.forName("com.mysql.jdbc.Driver");

      • 通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块

      static {
          try {
              java.sql.DriverManager.registerDriver(new Driver());
          } catch (SQLException E) {
              throw new RuntimeException("Can't register driver!");
          }
      }
      • 注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。在jar包中,存在一个java.sql.Driver配置文件,文件中指定了com.mysql.jdbc.Driver

    • 获取数据库连接(获取到数据库的连接并返回连接对象)

      • static Connection getConnection(String url, String user, String password); (该方法是DriverManager类中的静态方法)

        • 返回值:Connection数据库连接对象

        • 参数

          • url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称

          • user:用户名

          • password:密码

 

Connection

  • Connection:数据库连接对象

    • 获取执行者对象

      • 获取普通执行者对象:Statement createStatement();

      • 获取预编译执行者对象:PreparedStatement prepareStatement(String sql);

    • 管理事务

      • 开启事务:setAutoCommit(boolean autoCommit); 参数为false,则开启事务。

      • 提交事务:commit();

      • 回滚事务:rollback();

    • 释放资源

      • 立即将数据库连接对象释放:void close();

 

3.Statement

  • Statement:执行sql语句的对象

    • 执行DML语句:int executeUpdate(String sql);

      • 返回值int:返回影响的行数。

      • 参数sql:可以执行insert、update、delete语句。

      该返回值是int类型,不用释放资源

    • 执行DQL语句:ResultSet executeQuery(String sql);

      • 返回值ResultSet:封装查询的结果。

      • 参数sql:可以执行select语句。

    • 释放资源

      • 立即将执行者对象释放:void close();

 

4.ResultSet

  • ResultSet:结果集对象

    • 判断结果集中是否还有数据:boolean next();

      • 有数据返回true,并将索引向下移动一行

      • 没有数据返回false

      • 所以我们可以利用while循环来遍历数据

    • 获取结果集中的数据:XXX getXxx("列名");

      • XXX代表数据类型(要获取某列数据,这一列的数据类型)

      • 例如:String getString("name"); int getInt("age");

    • 释放资源

      • 立即将结果集对象释放:void close();

 

三、JDBC案例student学生表的CRUD

1.数据准备

  • 数据库和数据表

-- 创建db14数据库
CREATE DATABASE db14;

-- 使用db14数据库
USE db14;

-- 创建student表
CREATE TABLE student(
	sid INT PRIMARY KEY AUTO_INCREMENT,	-- 学生id
	NAME VARCHAR(20),					-- 学生姓名
	age INT,							-- 学生年龄
	birthday DATE						-- 学生生日
);

-- 添加数据
INSERT INTO student VALUES (NULL,'张三',23,'1999-09-23'),(NULL,'李四',24,'1998-08-10'),(NULL,'王五',25,'1996-06-06'),(NULL,'赵六',26,'1994-10-20');

 

实体类

  • Student类,成员变量对应表中的列

  • 注意:所有的基本数据类型需要使用包装类,因为我们现在是在操作数据库,把数据库里的数据读取出来之后,封装到学生对象里面,那么我们数据表里的数据有可能出现null值的情况,以防null值无法封装

注意:我们为什么要创建实体类呢?因为我们的学生表里的数据比较多了&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值