• JDBC详解


    JDBC就是使用java语言操作关系型数据库的一套API。

    JDBC(Java Database Connectivity)是Java语言中用于连接和操作数据库的一种标准接口。它提供了一组方法和类,使Java程序能够与各种不同类型的关系型数据库进行交互。

    JDBC的主要功能包括建立数据库连接、执行SQL语句、处理查询结果、事务处理等。通过JDBC,开发人员可以使用Java程序来访问和操作数据库,而不需要直接编写特定数据库的特定代码。

    JDBC的设计目标是提供一种独立于数据库的数据库访问接口,使得开发人员可以在不同的数据库系统之间切换而不需要改变程序代码。JDBC通过使用驱动程序来实现这一目标,每个数据库都需要提供一个对应的JDBC驱动程序。

    使用JDBC可以实现各种数据库操作,如创建数据库、创建表、插入数据、更新数据、删除数据等。同时,JDBC还支持事务处理和批量更新等高级操作。

    JDBC是Java平台的一部分,可以在Java开发环境中直接使用。目前,大多数数据库都提供了对应的JDBC驱动程序,可以很方便地与Java程序进行集成。

    下面我们来一起学习以下吧!

    ---------------------------------------------------------------------------------------------------------------------------

    为了方便大家一起动手,我把建表的代码给放进来了

    CREATE table account(
    id int,
    name varchar(20),
    money INT
    );

    还有表中的数据

    insert into account(id,name,money) VALUES(1,'张三',1000);
    insert into account(id,name,money) VALUES(2,'李四',1000); 

     建好之后就是这样啦

    affda5a0f0734e818aad5c31c37fcb7a.png

    数据库建好了之后我们就要尝试再java中写sql语句

    大体就是这样

    a225dc1f85d445a2a121c0c0eddb9cc2.png

    1、首先我们得创建工程,导入驱动jar包

     cfd9e57c00024854ae07f9baa9df0bea.png

    jar包导入之后,我们右键点击jar包,选择add as library

    d866ec2f7b57472a895e203254d4b149.png

    然后这个可以看情况而定了

    6114fe3eb5364ad985e2b87e4ac7a15a.png

    2、注册驱动

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

    3、获取链接

    Connection conn = DriverManager.getConnection(url, username, password);

    4、定义sql语句

    String sql="updata..."; 

    5、获取执行sql对象

     Statement stmt=conn.createStatement();

    6、执行sql

     stmt.executeUpdate(sql);

    7、处理返回结果

    8、释放资源

    结果如下

     e4f878daa3144126b6162c20ce7773a8.png

    但是会有红字,idea建议我们使用比较安全的链接方式SSL,配置完会是我们的性能降低一点,所以不使用,我们可以在后面加上    ?useSSL=false

    c91b4d8cd38b4a2f9d6fff97a448ced5.png

    这样就没有红字了 

    b5878893649d43eda27892741aedc35c.png 

    JDBC API 详解

    DriverManager

    DriverManager(驱动管理类)作用

    1、注册驱动

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

    Mysql 5之后的驱动包,可以省略注册驱动的步骤

    自动加载jar包中的META-INF/services/java.sql.Driver文件中的驱动类 

    2、获取数据库连接

    Connection conn = DriverManager.getConnection(url, username, password);

    conn我们可以自己随便取

    url:连接路径

    语句  jdbc:mysql://ip地址(域名):端口号/数据库名称?参数键值对1&参数键值对2..

    示例  jdbc:mysql://127.0.0.1:3307/db3

     

    • 如果连接的是本机mysql服务器的话,并且mysql服务器默认端口为3306,则url可以简写为

    jdbc:mysql:///数据库名?参数键值对

    • 配置useSSL=false参数,禁用安全连接方式,解决警告提示

    username:用户名

    password:密码

     

    Connection

    1、获取执行sql的对象

    • 普通执行sql对象

    Statement createStatement()

    • 预编译sql的执行sql对象:防止sql注入

    PreparedStatement prepareStatement(sql) 

    •  执行存储过程中的对象

    CallableStatement prepareCall(sql) 

     2、事务管理

    • mydql事务管理

    开启事务:BEGIN;/START TRANSACTION

    提交事务:COMMIT;

    回滚事务:ROLLBACK;

     

    Mysql默认自动提交事务 

    • JDBC事务管理:Connection接口中定义了三个对应的方法 

    开启事务:setAutoCommit(Boolean autoCommit):true为自动提交事务;false为手动提交事务,即为开启事务

    提交事务:commit()

    回滚事务:rollback() 

    try {
        //开启事务
        conn.setAutoCommit(false);
        //执行sql
        int count1 = stmt.executeUpdate(sql1);
        //处理结果
        System.out.println(count1);
        //执行sql
        int count2 = stmt.executeUpdate(sql2);
        //处理结果
        System.out.println(count2);
        //提交事务
        conn.commit();
    } catch (Exception e) {
        //回滚事务
        conn.rollback();
        throw new RuntimeException(e);
    }

    c1cac0a954b44157b3c142ec441226fa.png 

    Statement

    • Statement作用:执行sql语句
    • 执行sql语句

    int executeUpdate(sql):执行DML、DDL语句

    返回值:(1)DML语句影响的行数(2)DDL语句执行后、执行成功也可能返回0 

    ResultSet executeQuery(sql):执行DQL语句

    返回值:ResultSet结果集对象 

    fc4bf584337848d2aea2e06475664555.png 

    执行DML语句

    2303250b4ffa403692dd63b499863d62.png

     表中有id=1的受影响行数为1

    f730be3aee6b4225a23922f61c8027c3.png 

    313a387705b340fda16189e9486fe398.png

    表中没有id=5的数据,受影响行数为0 

     784ae78077b7432fb9de80f76e2b28d6.png

    还可以优化以下,用户想看到的是修改成功了还是失败了

    6067a21152874991aef1e83bbceaeeff.png

    id=5时是下面的结果

    c0758317fe9e4999be21bd697fae093f.png

    执行DDL语句

    da75194980e14ffa8bb3b35417a8327a.png

     635b0a799e284f319a341734e95810d6.png

    db2创建成功了

    8c0c33f926794a40ad0ecbca7005687d.png

    再看一下删除

    0dabb73abe864cfc99bd8cbc6882bf20.png

    be9a55cbba9e43ef87fd68d215c46ae4.png

    返回的居然是0,但是我们删除成功了,所以这里没有使用if语句去判断成功与否

    3f0b759f539c4c91b8d18352beef2271.png

     

     

     

     

    未完待续。。。

     

  • 相关阅读:
    解决git报错 “remote: Please remove the file from history and try again.”
    Codeforces 9D 卡特兰数,二叉树种类
    游戏“羊了个羊”火爆天际背后的秘密
    crmebpro2.2.2多店版,可包更新
    Jenkins 下载安装
    黑马瑞吉外卖之菜品的分页查询展示(难点)
    纷享销客罗旭对话旷视唐文斌:数字化的AI革命之路
    电动扳手设计(说明书+开题报告+英文文献及译文+cad图纸)
    Vue:CSR(客户端渲染)、SSR(服务端渲染)、同构渲染
    协程是如何实现线程切换的
  • 原文地址:https://blog.csdn.net/m0_46702681/article/details/136607575