JDBC小白总结

1.JDBC

在这里插入图片描述

  • 作用:作用就是通过JAVA操作数据库,本质是一套规范(接口)
  • 解耦:JDBC规范(接口)(DB2,sqlserver,Oracle,mysql,maridb)

JDBC编写步骤

  1. 导包
  2. 注册驱动
  3. 建立连接
  4. 获取语句执行对象
  5. 获取ResultSet
  6. 解析结果
  7. 关闭资源

2.协议:什么情况会触发类加载

  1. new
  2. 使用静态方法
  3. 加载子类的时候父类被加载

类加载器的作用

将我们编写的class文件,加载到jvm内存中(永久代)

3.Connetion(连接)

  1. 创建Statement对象
  2. 管理事务(ACID)
  3. 原子性 A
  4. 一致性 C
  5. 隔离性 I
  6. 持久性 D
  7. 创建用户表,添加用户信息

Sql注入攻击

  • 作用:利用特殊的sql格式来实现错误密码登录, 最终能够正确查询数据
  1. JDBC的概念,JAVA操作关系型数据库的规范

  2. 主要包含API

    1. DriverManager
    2. Connection
    3. Statement
    4. ResultSet
  3. 增删改查

    1. 查: 和hello 一致
    2. 改: executeUpdate() : int
    3. 增:executeUpdate() : int
    4. 删: executeUpdate() : int
  4. JDBC工具类

    1. 就是简化咱们获取链接以及关闭资源的代码
    2. 实现步骤:
      1. 配置文件
      2. 加载配置文件
      3. 获取链接方法
      4. 释放资源方法
  5. 整合代码到web工程

  6. sql注入

    1. 实现方式就是拼接字符串在密码错误的情况下实现sql能够正常查询数据
SELECT * FROM user WHERE loginname= '' or 1 = 1 -- AND password='" + password + "'

prepareStatement

  • 作用: 预编译SQL语句,以防止SQL注入问题

  • 使用:

    扫描二维码关注公众号,回复: 12015829 查看本文章
    • 创建:

      PrepareStatement ps = connection.prepareStatement("select * from student where id = ?");
      ps.setInt(1, 22);   
      
    • 执行

      • 查询:ps.executeQuery()
      • 修改:ps.executeUpdate()

事务管理

  • 使用对象:Connection对象

  • 事务方法:

    • 开启事务:setAutoCommit(false)
    • 如何提交:commit()
    • 回滚:rollback()
  • 账户,转账案列

    C3P0连接池

    步骤

    1.导包(还有mysql的驱动包,)

    2.配置信息c3p0-config.xml–>连接数据库的信息

    参数:

    initialPoolSize  //初始连接数量
    maxPoolSize  //最大连接数量
    checkTimeOut //等待时间
     // 3.直接创建
    new combopooledDataSource();
    
    

c3p0测试

直接创建CombopooledDataSource

public class C3P0Test1 {
    
    
    public static void main(String[] args) throws Exception{
    
    
        //1.创建c3p0的数据库连接池对象
        DataSource dataSource = new ComboPooledDataSource();

        //2.通过连接池对象获取数据库连接
        Connection con = dataSource.getConnection();


        //3.执行操作
        String sql = "SELECT * FROM student";
        PreparedStatement pst = con.prepareStatement(sql);

        //4.执行sql语句,接收结果集
        ResultSet rs = pst.executeQuery();

        //5.处理结果集
        while(rs.next()) {
    
    
            System.out.println(rs.getInt("sid") + "\t" + rs.getString("name") + "\t" + rs.getInt("age") + "\t" + rs.getDate("birthday"));
        }

        //6.释放资源
        rs.close();
        pst.close();
        con.close();
    }
}

druid

步骤

1.导包

2.配置文件:druid.properties

initialSize

maxActive

maxWait

3.通过properties集合,加载配置文件–classloader()

  1. 获取配置文件的流对象

  2. 把流对象放在load()中

  3. 通过连接处工厂类

    代码

        public static void main(String[] args) throws Exception {
          
          
            InputStream inputStream = Demo2_Druid.class.getClassLoader().getResourceAsStream("druid.properties");
            Properties properties = new Properties();
            properties.load(inputStream);
            DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
            Connection connection = dataSource.getConnection();
            String sql = "select * from student";
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(sql);
            while (resultSet.next()) {
          
          
                System.out.println(resultSet.getInt("sid") + "\t" + resultSet.getString("name") + "\t" + resultSet.getInt("age") + "\t" + resultSet.getDate("birthday"));
            }
           
            statement.close();
            resultSet.close();
            connection.close();
    
        }
    

拓展:策略模式

代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

  • 执行者
  • 策略(接口)
  • 调用者(调用策略传给执行者)实现类

BeanHandler实现类–>作用:把结果集转换为一个对象

DataBaseMetaData数据库源信息

//获取数据库产品名字
String getDatabaseProductName();
//获取数据库产品版本
int getDatabaseProductVersion();
//1.User--->Musql
preparedStatement.getMetaData()
//2.Mysql--->User
resultSet.getMetaData()

元数据的基本概述

什么是元注解?

给注解加注解的,称为元注解。

什么是元数据?
在这里插入图片描述

参数元数据:ParameterMetaData

目标

参数元数据的API和案例

获取ParameterMetaData

PreparedStatement接口中的方法 说明
ParameterMetaData getParameterMetaData() 通过预编译的语句获取参数元数据

接口中的方法

因为是接口,所以需要数据库厂商驱动的支持,mysql对参数元数据的支持不是太理想,但不影响今天的使用

ParameterMetaData接口中的方法 说明
int getParameterCount() 获取参数的个数
String getParameterTypeName(int param) 获取某一列参数的数据类型,参数就是列号,从1开始
只能获取varchar类型的数据

参数元数据:ParameterMetaData

目标

参数元数据的API和案例

获取ParameterMetaData

PreparedStatement接口中的方法 说明
ParameterMetaData getParameterMetaData() 通过预编译的语句获取参数元数据

接口中的方法

因为是接口,所以需要数据库厂商驱动的支持,mysql对参数元数据的支持不是太理想,但不影响今天的使用

ParameterMetaData接口中的方法 说明
int getParameterCount() 获取参数的个数
String getParameterTypeName(int param) 获取某一列参数的数据类型,参数就是列号,从1开始
只能获取varchar类型的数据

猜你喜欢

转载自blog.csdn.net/weixin_47785112/article/details/106766353