MySQL学习总结(4)--- JDBC概念、核心类、编程步骤

MySQL学习总结(4)— JDBC概念、核心类、编程步骤

1. JDBC概念

JDBC(Java Data Base Connectivity):Java操作数据库的规范(接口)。

JDBC是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够执行SQL语句。

它由一组用Java语言编写的类和接口组成。各种不同类型的数据库都有相应的实现,本文中的代码都是采用MySQL数据库实现的。

应用程序必须要通过相应的数据库驱动程序与数据库进行交互。因此,开发人员想要操作数据,需要通过jdbc加载具体的驱动。

【注意】:JDBC仅仅是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。
在这里插入图片描述

2. JDBC核心类

核心类说明
DriverManager注册驱动;获取Connection
Connectionconnection对象表示连接,获取Statement对象
Statement(PreStatement)向数据库发送SQL语句
ResultSet结果集,是一个二维的表格
  • DriverManager :

    (1)注册驱动:这可以让JDBC知道要使用的是哪个驱动;
    (2)获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。

    • 常用方法:DriverManager.getConnection(url, user, password);获取数据库连接。

      url的书写格式:协议 :子协议 : //主机:端口 + 数据库 + 参数

      常用数据库URL地址的写法:
      Oracle写法:jdbc:oracle:thin:@localhost:1521:数据表名称
      SqlServer写法:jdbc:microsoft:sqlserver: //localhost:1433; DatabaseName=数据表名称
      MySql写法:jdbc:mysql: //localhost:3306/数据表名称,如果连接的是本地的Mysql数据库,并且连接使用的端口是3306,那么的url地址可以简写为: jdbc:mysql:///数据库
      
  • Connection :
    connection对象表示连接,与数据库的通讯都是通过这个对象展开的:最为重要的一个方法就是用来获取Statement对象。

    常用方法:

    方法说明
    createStatement()创建向数据库发送sql的statement对象。
    prepareStatement(sql)创建向数据库发送预编译sql的PrepareSatement对象
    prepareCall(sql)创建执行存储过程的callableStatement对象
    setAutoCommit(boolean autoCommit)设置事务是否自动提交
    commit()在链接上提交事务
    rollback()在此链接上回滚事务

    【注意】:Connection对象,是非常稀有的资源,用完后必须马上释放,如果Connection不能及时、正确的关闭,极易导致系统宕机。

  • Statement:
    statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句。

    需要释放资源。

    常用方法:

    方法说明
    executeQuery(String sql)向数据发送查询语句。
    executeUpdate(String sql)执行更新操作(insert、update、delete等)
    execute(String sql)向数据库发送任意sql语句
    addBatch(String sql)把多条sql语句放到一个批处理中
    executeBatch()向数据库发送一批sql语句执行
  • ResultSet:
    ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。

    结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据,如调用ResultSet.next() 方法,可以使光标指向具体的数据行。

    需要释放资源。

    常用方法:

    方法说明
    next()移动到下一行
    Previous()移动到前一行
    absolute(int row)移动到指定行
    beforeFirst()移动resultSet的最前面
    afterLast()移动到resultSet的最后面

3. JDBC编程步骤

3.1 准备工作

使用JDBC 首先需要下载驱动,下载地址:https://mvnrepository.com/artifact/mysql/mysql-connector-java下载jar包。

然后导入jar包,详细步骤可参考https://blog.csdn.net/yinyanyao1747/article/details/90751024。

搭建实验环境,在mysql中创建一个库,并创建数据表,插入数据。

create database jdbcStudy character set utf8 collate utf8_general_ci;

use jdbcStudy;

create table users(
    id int primary key,
    name varchar(40),
    password varchar(40),
    email varchar(60),
    birthday date
);

insert into users(id,name,password,email,birthday) values(1,'zhansan','123456','zs@sina.com','1980-12-04');
insert into users(id,name,password,email,birthday) values(2,'lisi','123456','lisi@sina.com','1981-12-04');
insert into users(id,name,password,email,birthday) values(3,'wangwu','123456','wangwu@sina.com','1979-12-04');

在这里插入图片描述

3.2 JDBC编程

  • JDBC编程步骤:

    • 1.获取数据库连接
    • 2.创建statement对象
    • 3.编写sql语句
    • 4.执行sql语句
    • 5.得到执行结果
    • 6.释放资源
  • 代码实现:

    • 文件目录
      在这里插入图片描述

    • 配置properties文件

      driver = com.mysql.jdbc.Driver
      username = root
      password = 123456
      url = jdbc:mysql://localhost:3306/jdbcstudy?useSSL=true
      
    • 编写一个创建连接数据库的工具类JDBCUtils

      创建连接数据库都是死代码 , 每次写及其不方便 , 还有关闭连接,所以写成一个工具类,简化开发。

      package org.jdbc.utils;
      
      import java.io.IOException;
      import java.io.InputStream;
      import java.sql.*;
      import java.util.Properties;
      
      //创建连接数据库工具类
      public class JDBCUtils {
      
          private static String driver=null;
          private static String username=null;
          private static String password=null;
          private static String url=null;
      
          static{
              try {
                  //加载配置文件
                  InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("db.properties");
                  Properties properties = new Properties();
                  properties.load(is);
                  //读取配置文件
                  driver  = properties.getProperty("driver");
                  username  = properties.getProperty("username");
                  password  = properties.getProperty("password");
                  url  = properties.getProperty("url");
      
                  //加载数据库驱动
                  Class.forName(driver);
      
              } catch (IOException e) {
                  e.printStackTrace();
              } catch (ClassNotFoundException e) {
                  e.printStackTrace();
              }
          }
      
          //获取数据库连接对象
          public static Connection getConnection() throws SQLException {
              return DriverManager.getConnection(url,username,password);
          }
      
          //释放资源
          public static void closeAll(ResultSet resultSet, Statement statement,Connection connection){
              if (resultSet!=null){
                  try {
                      resultSet.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
              if (statement!=null){
                  try {
                      statement.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
              if (connection!=null){
                  try {
                      connection.close();
                  } catch (SQLException e) {
                      e.printStackTrace();
                  }
              }
          }
      }
      
    • 测试JDBC的CRUD

      package org.jdbc.dao;
      
      import org.jdbc.utils.JDBCUtils;
      import com.sun.org.apache.xml.internal.dtm.ref.DTMDefaultBaseTraversers;
      import org.junit.Test;
      import java.sql.Connection;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      import java.sql.Statement;
      
      //测试JDBC的CRUD
      public class Demo01 {
      
          @Test
          public void insert() {
              Connection connection = null;
              Statement statement = null;
      
              try {
                  //1.获取数据库连接
                  connection = JDBCUtils.getConnection();
                  //2.创建statement对象
                  statement = connection.createStatement();
                  //3.编写Sql语句
                  String sql = "INSERT INTO users(id,NAME,PASSWORD,email,birthday) VALUES(4,'liuhu','234567','liuhu@sina.com','1980-10-05');";
                  //4.执行sql语句
                  int i = statement.executeUpdate(sql); //返回受影响的行数
                  
              } catch (SQLException e) {
                  e.printStackTrace();
              } finally {
                  //6.释放资源
                  JDBCUtils.closeAll(null,statement,connection);
              }
          }
      
          @Test
          public void delete() {
              Connection connection = null;
              Statement statement = null;
      
              try {
                  //1.获取数据库连接
                  connection = JDBCUtils.getConnection();
                  //2.创建statement对象
                  statement = connection.createStatement();
                  //3.编写Sql语句
                  String sql = "delete from users where id = 5";
                  //4.执行sql语句
                  int i = statement.executeUpdate(sql); //返回受影响的行数
      
                  if (i>0){
                      System.out.println("删除成功");
                  }
              } catch (SQLException e) {
                  e.printStackTrace();
              } finally {
                  //6.释放资源
                  JDBCUtils.closeAll(null,statement,connection);
              }
          }
      
          @Test
          public void update() {
              Connection connection = null;
              Statement statement = null;
      
              try {
                  //1.获取数据库连接
                  connection = JDBCUtils.getConnection();
                  //2.创建statement对象
                  statement = connection.createStatement();
                  //3.编写Sql语句
                  String sql = "update users set name = 'qinjiang' where id = 4";
                  //4.执行sql语句
                  int i = statement.executeUpdate(sql); //返回受影响的行数
      
                  if (i>0){
                      System.out.println("修改成功");
                  }
              } catch (SQLException e) {
                  e.printStackTrace();
              } finally {
                  //6.释放资源
                  JDBCUtils.closeAll(null,statement,connection);
              }
          }
      
          @Test
          public void query() {
      
              Connection connection = null;
              Statement statement = null;
              ResultSet resultSet = null;
              try {
                  //1.获取数据库连接
                  connection = JDBCUtils.getConnection();
                  //2.创建statement对象
                  statement = connection.createStatement();
      
                  //3.编写Sql语句
                  String sql = "select * from users";
                  //4.执行sql语句
                  resultSet = statement.executeQuery(sql);
      
      			
      			//step5:获取执行结果
                  while (resultSet.next()){
                      System.out.println(resultSet.getInt("id"));
                      System.out.println(resultSet.getString("name"));
                      System.out.println(resultSet.getString("password"));
                      System.out.println(resultSet.getString("email"));
                      System.out.println(resultSet.getDate("birthday"));
                  }
              } catch (SQLException e) {
                  e.printStackTrace();
              } finally {
                  //6.释放资源
                  JDBCUtils.closeAll(resultSet,statement,connection);
              }
          }
      }
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值