2022-8-18 第六组 JDBC

JDBC

1. 概念:Java DataBase Connectivity Java 数据库连接, Java语言操作数据库

JDBC本质:其实是官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口。各个数据库厂商去实现这套接口,提供数据库驱动jar包。我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

2. 快速入门:

* 步骤:
    1. 导入驱动jar包 mysql-connector-java-5.1.37-bin.jar
        1.复制mysql-connector-java-5.1.37-bin.jar到项目的libs目录下
        2.右键-->Add As Library
    2. 注册驱动
    3. 获取数据库连接对象 Connection
    4. 定义sql
    5. 获取执行sql语句的对象 Statement
    6. 执行sql,接受返回结果
    7. 处理结果
    8. 释放资源

代码实现:

        //1. 导入驱动jar包
        //2.注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        //3.获取数据库连接对象
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/db3", "root", "root");
        //4.定义sql语句
        String sql = "update account set balance = 500 where id = 1";
        //5.获取执行sql的对象 Statement
        Statement stmt = conn.createStatement();
        //6.执行sql
        int count = stmt.executeUpdate(sql);
        //7.处理结果
        System.out.println(count);
        //8.释放资源
        stmt.close();
        conn.close();

3. 详解各个对象:

1. DriverManager:驱动管理对象

* 功能:
1. 注册驱动:告诉程序该使用哪一个数据库驱动jar
            static void registerDriver(Driver driver) :注册与给定的驱动程序 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包可以省略注册驱动的步骤。
2. 获取数据库连接:
            * 方法:static Connection getConnection(String url, String user, String password)
            * 参数:
                * url:指定连接的路径
                    * 语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
                    * 例子:jdbc:mysql://localhost:3306/db3
                    * 细节:如果连接的是本机mysql服务器,并且mysql服务默认端口是3306,则url可以简写为:jdbc:mysql:///数据库名称
                * user:用户名
                * password:密码

2. Connection:数据库连接对象

    1. 功能:
        1. 获取执行sql 的对象
            * Statement createStatement()
            * PreparedStatement prepareStatement(String sql)
        2. 管理事务:
            * 开启事务:setAutoCommit(boolean autoCommit) :调用该方法设置参数为false,即开启事务
            * 提交事务:commit()
            * 回滚事务:rollback()

3. Statement:执行sql的对象

    1. 执行sql
        1. boolean execute(String sql) :可以执行任意的sql 了解
        2. int executeUpdate(String sql) :执行DML(insert、update、delete)语句、DDL(create,alter、drop)语句
        * 返回值:影响的行数,可以通过这个影响的行数判断DML语句是否执行成功 返回值>0的则执行成功,反之,则失败。
        3. ResultSet executeQuery(String sql)  :执行DQL(select)语句

4. ResultSet:结果集对象,封装查询结果

    * boolean next(): 游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true
    * getXxx(参数):获取数据
        * Xxx:代表数据类型   如: int getInt() , String getString()
        * 参数:
            1. int:代表列的编号,从1开始   如: getString(1)
            2. String:代表列名称。 如: getDouble("balance")

    * 注意:
        * 使用步骤:
            1. 游标向下移动一行
            2. 判断是否有数据
            3. 获取数据

           //循环判断游标是否是最后一行末尾。
            while(rs.next()){
                //获取数据
                //6.2 获取数据
                int id = rs.getInt(1);
                String name = rs.getString("name");
                double balance = rs.getDouble(3);

                System.out.println(id + "---" + name + "---" + balance);
            }

练习:

        1. account表 添加一条记录
        2. account表 修改记录
        3. account表 删除一条记录

        代码:
            Statement stmt = null;
            Connection conn = null;
            try {
                //1. 注册驱动
                Class.forName("com.mysql.jdbc.Driver");
                //2. 定义sql
                String sql = "insert into account values(null,'王五',3000)";
                //3.获取Connection对象
                conn = DriverManager.getConnection("jdbc:mysql:///db3", "root", "root");
                //4.获取执行sql的对象 Statement
                stmt = conn.createStatement();
                //5.执行sql
                int count = stmt.executeUpdate(sql);//影响的行数
                //6.处理结果
                System.out.println(count);
                if(count > 0){
                    System.out.println("添加成功!");
                }else{
                    System.out.println("添加失败!");
                }

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }finally {
                //stmt.close();
                //7. 释放资源
                //避免空指针异常
                if(stmt != null){
                    try {
                        stmt.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }

                if(conn != null){
                    try {
                        conn.close();
                    } catch (SQLException e) {
                        e.printStackTrace();
                    }
                }
            }

Original: https://www.cnblogs.com/ychptz/p/16600415.html
Author: 阿萨德菩提子
Title: 2022-8-18 第六组 JDBC

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/611115/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 我的第一本算法书 第一章

    1.1 决定数据顺序和位置关系的是数据结构 电话簿的数据结构 按获取顺序排序 按拼音顺序排序 添加简单 查询麻烦 查询简单 添加麻烦 两者结合 分别使用不同的表存储不同的首字母, …

    数据库 2023年6月11日
    086
  • JVM-方法区

    方法区 JAVA技术交流群:737698533 方法区是运行时数据区的最后一个内容,Method Area 栈,堆,方法区中的交互关系 方法区简述 方法区(Method Area)…

    数据库 2023年6月16日
    079
  • mysql约束

    一、表约束 PK主键约束(索引)唯一约束 非空 默认值 在关系数据库,一个表中,只能有一个主键(Primary Key),有些数据库没有pk,系统报出错误。 在myql数据库,建立…

    数据库 2023年6月9日
    073
  • Mybatis-Plus使用 ORDER BY FIELD

    一、Mybatis-Plus使用 ORDER BY FIELD 如图所示 两张仅有一个字段关联的表,商品表想用活动商品表查出来的顺序去查商品可以使用以下方法(不想去XML写Sql的…

    数据库 2023年6月6日
    074
  • Cobar提出的一种在分库场景下对Order By / Limit 的优化

    搜索关注微信公众号”捉虫大师”,后端技术分享,架构设计、性能优化、源码阅读、问题排查、踩坑实践。本文已收录 https://github.com/lkxia…

    数据库 2023年5月24日
    0102
  • pm2 常用命令

    写一篇文章帮助自己记忆整理一下pm2的常用命令 先说一些废话 之前学习 Nodejs项目的时候使用了 pm2作为生产环境的进程管理工具,最近服务器崩了需要重启一些服务,发现有些命令…

    数据库 2023年6月11日
    0107
  • MySQL主从复制

    一、概述 主从复制是指将主数据库(Master)的DDL和DML操作通过二进制日志传到从库(Slave)服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数…

    数据库 2023年5月24日
    098
  • 数据库操作命令

    MySQL Key Command 清屏 (滚屏 ) 登录 切换数据库 查看数据库 查看表 查看表结构 退出 帮助 Key Command 查看可用字符集 查看默认字符集 设置默认…

    数据库 2023年5月24日
    069
  • 【转】SpringBoot多模块打包瘦身分离

    背景 首先项目是个多层级的多模块springBoot项目,每次打出来的jar包都在90M,其中包含核心代码以及所有依赖的jar包,上传到服务器速度比较慢。 由于核心代码(contr…

    数据库 2023年6月6日
    099
  • mybatis SelectKey解析

    1.selectKey介绍及作用 resultType:sql返回的java类型 statementType:STATEMENT|PREPARED|CALLABLE三种默认PREP…

    数据库 2023年6月16日
    087
  • MySQL的B+树索引和hash索引的区别

    简述一下索引: 索引是数据库表中一列或多列的值进行排序的一种数据结构;索引分为聚集索引和非聚集索引,聚集索引查询类似书的目录,快速定位查找的数据,非聚集索引查询一般需要再次回表查询…

    数据库 2023年5月24日
    077
  • jdbc-处理查询结果集

    package com.cqust; import java.sql.Connection;import java.sql.DriverManager;import java.sq…

    数据库 2023年5月24日
    065
  • SQLZOO练习(一)SELECT BASICS,SELECT form world

    name continent area population gdp Afghanistan Asia 652230 25500100 20343000000 Albania Eu…

    数据库 2023年6月16日
    096
  • Java中的SPI原理浅谈

    在面向对象的程序设计中,模块之间交互采用接口编程,通常情况下调用方不需要知道被调用方的内部实现细节,因为一旦涉及到了具体实现,如果需要换一种实现就需要修改代码,这违反了程序设计的&…

    数据库 2023年6月14日
    063
  • 推荐几款最好用的MySQL开源客户端,建议收藏!

    一、摘要 众所周知,MYSQL 是目前使得最广泛、最流行的数据库技术之一,为了更方便的管理数据库,市场上出现了大量软件公司和个人开发者研发的客户端工具,比如我们所熟知的比较知名的客…

    数据库 2023年6月14日
    088
  • MySQL数据库-数据表(中)

    分析:给 reader 表添加数据. INSERT INTO:插入数据,插入数据的时候会检查主键或者唯一索引,如果出现重复就会报错; 语法:INSERT INTO table_na…

    数据库 2023年6月11日
    093
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球