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)

大家都在看

  • URL解码时,为什么将加号解码为空?

    以下代码在.NET Framework 2.0 中测试。 先看一个例子: test.aspx页面: 当参数 parameters 输出到页面后,值已经不为”A+B&#8…

    数据库 2023年6月11日
    058
  • element-ui el-table 悬停/选中 行样式,鼠标样式

    /* 用来设置当前页&am…

    数据库 2023年6月16日
    084
  • Python–Queue

    线程队列: 先入先出队列、后进先出队列、优先级队列 先入先出: 后进先出: 优先级队列: 设置队列空间大小 生产者消费者模型示例: Original: https://www.cn…

    数据库 2023年6月9日
    097
  • Tomcat配置文件Server.xml解析

    一、Sax的事件驱动模型 类图 基础实现类 DefaultHandler2: 此类扩展了SAX2基本处理程序类,以支持SAX2 LexicalHandler , DeclHandl…

    数据库 2023年6月11日
    061
  • firewall 命令简单操作

    Firewalld 是维护防火墙策略的守护程序的名称。使用 firewall-cmd 命令与防火墙配置进行交互, 使用区域概念对与系统交互的流量进行分段。网络接口分配给一个或多个区…

    数据库 2023年6月14日
    084
  • git 烂笔头

    触类旁通, 举一反&amp…

    数据库 2023年6月9日
    088
  • mysql常用语句 3

    1.找出每个部门平均薪水的薪资等级,from后面嵌套子查询第一步是找出每个部门的平均工资。 [En] The first step is to find out the avera…

    数据库 2023年5月24日
    082
  • PHP最全编码规约

    1.1 标签 (1)【强制】PHP 程序可以使用或来界定 PHP 代码,在 HTML 页面中嵌入纯变量时,可以使用这样的形式,不可使用其他的标签变种。 正例: (2)【强制】纯 P…

    数据库 2023年6月14日
    0116
  • vim+vundle配置

    Linux环境下写代码虽然没有IDE,但通过给vim配置几个插件也足够好用。一般常用的插件主要包括几类,查找文件,查找符号的定义或者声明(函数,变量等)以及自动补全功能。一般流程都…

    数据库 2023年6月9日
    094
  • 第十章 对象的生命周期

    1.什么是生命周期 对象创建 存活 销毁的完整的过程 2.为什么学习对象的生命周期 在以前通过new创建对象,调用对象,则该对象存活,直到被JVM的垃圾回收机制回收 现在由Spri…

    数据库 2023年6月14日
    095
  • Linux_hadoop2.2.0伪分布式搭建安装

    1.1 开启网络,ifconfig指令查看ip 1.2 修改主机名为自己名字(hadoop)centos 7 连接:https://zhuanlan.zhihu.com/p/375…

    数据库 2023年6月11日
    0111
  • HttpServletResponse 类

    HttpServletResponse 类的作用 HttpServletResponse 类和 HttpServletRequest 类一样。每次请求进来,Tomcat 服务器都会…

    数据库 2023年6月11日
    082
  • Angel工作室ASP.NET(AngelExam)开源驾校考试系统正式发布

    一、Angel工作室ASP.NET(AngelExam)开源驾校考试系统简介 Angel工作室ASP.NET(AngelExam)驾校考试系统是基于asp.net mvc4.5(C…

    数据库 2023年6月14日
    085
  • Mysql 手册

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ…

    数据库 2023年5月24日
    0122
  • CompletableFuture方法全解

    public class SpringbootWebApplicationTests { private final Logger logger = LoggerFactory.g…

    数据库 2023年6月6日
    085
  • [javaweb]jsp,jstl,el表达式的使用

    jsp java server page:java服务器前端页面,和servlet一样,用于动态web开发。 特点: 写jsp页面就像在写html html只给用户提供静态数据,j…

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