• Javaweb 路线之JDBC的理解笔记


    Javaweb 路线

    1.数据库(3天)

    怎么使用Java语言对数据库实现增删改查?

    jdbc:拓展性 灵活性比较差

    JDBC

    使用Java语言,连接数据库,对数据表进行管理和操作(CRUD)

    Java中的jdbc:提供一套api,使用这套api实现对数据的操作

    Java jdbc 的本质:仅仅定义的是一套接口

    preparedStatement 接口

    connection 接口

    statement接口

    resultset接口

    具体的实现类:有各个数据库厂商提供,可以操纵不同类型的关系型数据库 去下载jar包(驱动包)

    面向接口的编程方式:

    main(){//查询mysql数据库中指定数据表中的所有数据

    //看不到mysql的任何一个api实现类

    //操作的全部都是jdk中提供的接口api

    }

    JDBC的快速入门案例

    1.创建Java项目

    jdbc_quickstart  项目
    
    
    • 1
    • 2

    2.下载mysql数据库厂商提供的驱动包 jar包

    jar包的仓库  方便
    
    • 1

    3.将我们的驱动包导入到当前项目中的

    操作 看博客    as lib               
    
    • 1

    4.创建数据库/表

    
    
    • 1

    思想:面向接口编程

    5.编码:

    1. 注册驱动mysql驱动对象

    2. 获取mysql数据库连接的connection对象(驱动管理器的集合当中的对象,返回的是连接的对象)

    3. 编写mysql语句

    4. 获取能够发送sql语句的对象statement

    5. 通过statement对象发送sql语句

    6. 接收mysql的处理结果

    7. 释放资源

    1.注册数据库驱动
    DriverMananger.registerDriver(new Driver());
    2.获取数据库的连接对象
    
    connection conn = DriverManager.getConnection(url"jdbc:mysql://127.0.0.1:3386/reggie",user"",password"");
    
    3.编写sql语句
    string queryString = "delete from user where name = "王阿姨";
    4.获取发送sql对象
    coon.creatstatement();
    5.发送sql语句
    statement。executeUpdate(sql)
    6.处理结果
    sout (count > 0 ?"","")
    7.释放资源
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    建立连接————————mysql
    编写的sql语句发送给mysql
    class forname ("com.mysql.jdbc.Driver") 类加载器加载到内存
    
    • 1
    • 2
    • 3

    JDBC API详解

    1.DriverManager: 维护的一个集合 ArrayList<>

    1. 管理各个数据库驱动对象

    2. 注册驱动,管理注册的驱动:registerDriver(驱动对象)

    3. 获取Connection数据库连接对象 getConnection 提供了 数据库连接方法 通过注册的驱动包

    ***自动装配:springboot 里面就有***

    ***导的jar包的里面配置了一个驱动 反射 驱动包提供了这样的一个文件 services项目包下 meta-info services Java.sql.driver 配置驱动的路径 (可以不用手动的注册)***

    2.connection

    DriverManager.getconnection("jdbc:mysql:///reggie?user = root&password = 1234");
    //多个参数用& 隔开
    new properties;
    prop.setproperty("user","xxx")
    .....
    DriverManager.getConnection("jdbc:mysql:///reggie",properties)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    demo:
    connectionTCL:事务管理
    1.开启事务:关闭自动提交、
    coon.setAutoCommit(false);---手动提交
    2.使用try---(coon.commit) ---catch ---- (conn.rollback)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.statement 发送sql语句给具体的数据库

    staement作用:

    • dml

    int count = statement.executeUpdate(sql)

    • Dql

    resultset = statement.executeQuery(sql);

    处理结果

    if(rs.next()){

    object id = rs.getobject(“id”);

    sout(id);

    }

    jdbc的单元测试
    junit.jar 包
    @test
    public void insertTest(){
    System.out.println("执行sql语句");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.ResultSet

    1. 封装了DQL操作的结果数据

    如何获取ResultSet封装的数据?

    rs提供的方法----next()方法---- 返回的是boolean类型的结果

    if(result){
    
    rs.getxxx
    
    知道当前的类型也可以直接.getstring()
    
    1. rs,getobject(index)
    
    2. rs.getobject(columName)  根据当前列的名称
    
       }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    在外面创建一个实体(entity)类
    查询有哪些属性
    介绍一个操作:
    快捷键的使用  : alt + 鼠标右键    Edit —————— find ----- repalce
    创建get set tostring    
    进行优化   ---- 代码
    创建一个集合    List users = new ArrayList<>();
    创建一个对象 new user();
    user.getclass();
    getFields;
    for 遍历
    getDeclarrdFields  ---- 反射
    
    user.setid()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    next()

    getObject(“index”)

    getObject(“coname”)

    5.PreparedStatement推荐直接使用

    statement 存在的问题 就是sql注入 所以推荐使用 preparestatement

    1.接收用户输入的用户名和密码
    string username= "";
    string password = "";
    
    2.使用jdbc
    2.1获取数据库连接对象
    DriverManager.getconnection();
    
    2.2编写sql语句
    string querystr = "";
    2.3获取statement对象,并发送sql
    coon.creatstatement();
    stat.exexuteQuery(sql);
    2.4接收结果
    if(rs.next()){
    登陆成功
    }else{
    登陆失败
    }
    3.释放资源
    
    .close();
    
    
    出现的问题:
    字符串  ''的问题
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    什么是sql注入?
    ccsacac'or '1=1
    
    
    进行预编译操作  速度更快  ?user   =(true)
    
     要进行占位符的设置
      setstring(索引,参数)
      
      
      sql怎么避免的?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    1. 效率高,进行预编译,跳过sql语义的检查
    2. 安全,防止sql注入

    原理:

    获取psate预编译

    如果执行的是查询操作:conn.pst 对象 一定要记得补全占位符

    pst.setstring(Java.lan类型) 默认的是int 类型 如果数据量比较打的话要改成L

    入门案例重新写一下啊!!!!!!!!!!!!!!

    DriverManager.getConnection 获取数据库连接对象

    当前的位置创建和数据库的连接 下一次创建连接对象还要耗时 socket、编程还要加上io

    —解决方法 池化思想 数据连接池 创建一个池子 维护一个连接池的集合 先维护好几个连接 要进行sql连接 现场用现场接收 归还连接对象到连接池对象 – -比如说有线的电话 --数据库连接池

    数据库中怎么使用数据库连接池----面向接口的连接思想

    DataSource 接口

    jar包 比较主流的 德鲁伊 druid---- Druid 连接池 阿里巴巴

    使用过程:

    1. 导包jar—连接池
    2. jdk:DataSource接口
    3. 编写配置文件 : url username password 下面的就是连接池对象的参数 初始化连接数量 最大连接数 最大等待时间 配置数据库连接池参数 不配的话 会有默认值
    4. 编码 DruidDa’taSourceFactory 数据库连接池对象 获取连接池对象
    5. 通过datasource获取一个连接对象connection 归还到连接池
    连接池工厂对象:DruidDataSourceFactory.create
    
    • 1

    createdatasource

    new prop 对象

    加载 load(new fileinputstream(“相对路径或者绝对路径”))

    //获取数据库连接池 通过数据库连接池的工厂

    //从数据库连接

    jdbc流程:

    连接池:

    配合;连接池

    sout(system.getproperty(“usrer.dir”))//获取当前用户所在的路径

    //加载 属性文件中数据连接池的配置信息 到properties对象中

    //数据库连接池工厂对象,加载属性文件中的参数,构建连接池对象()

    //从连接池中获取一个连接对象

    作用:

    提升sql操作的执行效率

    连接对象的复用

    超时不等待

    5.CRUD案例

    tb_brand品牌表

    1. 查询所有品牌信息—select* from tb_brand
    2. 根据id查询指定的品牌信息 — id= 1—select* from tb_brand where id =?
    3. 根据多个id进行批量查询(id= 1,2,3)—select*from tb_brand where id in(?,?,?);
    4. 添加一条品牌信息 insert into tb_brand values(?,?,?,?);
    5. 根据id删除指定的品牌信息 delete from tb_brand where id =?;
    6. 批量删除品牌信息(id= 1,2,3)—delete from tb_brand where in(?,?,?)
    7. 根据id更新指定的品牌信息update tb_brand set 字段名称 =?,字段名称 =? where id=?

    作业:

    1. 入门案例
    2. 针对一张表实现crud(tb_brand)

    mybatis:对原生代码进行封装,提升效率 底层就是jdbc

    spingboot:

    2.后台

    3.前端

  • 相关阅读:
    【苹果家庭群发iMessage】 软件安装应用层的数据包的丢失不涉及IP层
    [附源码]计算机毕业设计JAVA航空售票管理系统
    python3之35个关键字详解
    视联网四方面优势引领行业技术
    MySQL数据库之主从复制及读写分离
    【需水预测】区域需水量预测方法-定额法
    深度学习Course2第一周Practical aspects of Deep Learning习题整理
    spark-RDD的两大方法
    vue判断滚动条上下拉及是否在顶部
    可视化拖拽组件库一些技术要点原理分析(四)
  • 原文地址:https://blog.csdn.net/weixin_49443524/article/details/127799408