4.7总结(内部类,JDBC API || 离散化,树状数组)

JAVA学习小结

一.内部类

        基础概念,用途和访问特点

什么是内部类:写在一个类中的另一个类称之为内部类;

内部类的用途:用于封装那些单独存在时没有意义,且是外部类的一部分的类(汽车发动机,人的心脏);提升代码的组织性,且更利于进行事件处理等操作。

访问特点

  • 内部类可以访问外部类的所有变量(包括私有);
  • 外部类访问内部类的成员时,必须创建对象。

        内部类的分类及其相关知识


二.JDBC API

Connection:

语句:
Connection connection = DriverManager.getConnection(url, user, password);

作用:建立与数据库的连接。
参数:url:数据库连接的URL。user:数据库用户名。password:数据库密码。

Statement:

语句:Statement statement = connection.createStatement();

作用:创建用于执行静态SQL语句的对象。

PreparedStatement:

语句:PreparedStatement preparedStatement = connection.prepareStatement(sql);

作用:创建预编译的SQL语句对象。

参数:sql:待执行的SQL语句,可以包含占位符?

ResultSet:

语句:ResultSet resultSet = statement.executeQuery(sql);

作用:执行SQL查询语句并返回结果集。

参数:sql:查询的SQL语句。

DriverManager:

语句:Class.forName(driver);

作用:加载并注册数据库驱动程序。

参数:driver:数据库驱动程序的类名。


增删查改小练习 

package com.demo;

import java.sql.*;

public class operation {
    public static void add(int id, String name, int age, String gender) throws Exception{
        //1.注册驱动
        // Class.forName("com.mysql.jdbc.Driver");
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 修改部分结束

        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/demo"; // 移除多余的空格
        String username = "root";
        String password = "root";

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

        //System.out.println(conn); //测试是否连接上mysql数据库

        //3.定义sql语句
        String sql = "insert into tb_demo(id, name, age, gender) values (?, ?, ?, ?)";


        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, id);
        pstmt.setString(2, name);
        pstmt.setInt(3, age);
        pstmt.setString(4, gender);

        //执行SQL
        int count = pstmt.executeUpdate(); //影响行数

        //处理结果
        //System.out.println(count > 0);

        //释放资源
        pstmt.close();
        conn.close();
    }

    public static void deleteById(int id) throws Exception{
        //1.注册驱动
        // Class.forName("com.mysql.jdbc.Driver");
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 修改部分结束

        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/demo"; // 移除多余的空格
        String username = "root";
        String password = "root";

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

        //System.out.println(conn); //测试是否连接上mysql数据库

        //3.定义sql语句
        String sql = "delete from tb_demo where id = ?";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setInt(1, id); // 根据 id 来删除数据

        //执行SQL
        int count = pstmt.executeUpdate(); //影响行数

        //处理结果
        //System.out.println(count > 0);

        //释放资源
        pstmt.close();
        conn.close();

    }

    public static void finding() throws Exception {
        //1.注册驱动
        // Class.forName("com.mysql.jdbc.Driver");
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 修改部分结束

        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/demo"; // 移除多余的空格
        String username = "root";
        String password = "root";

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

        //System.out.println(conn); //测试是否连接上mysql数据库

        //3.定义sql语句
        String sql = "select * from tb_demo";
        PreparedStatement pstmt = conn.prepareStatement(sql);

        //执行查询
        ResultSet rs = pstmt.executeQuery();

        //处理查询结果
        while (rs.next()) {
            // 获取查询结果的每一行数据
            int id = rs.getInt("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            String gender = rs.getString("gender");

            // 打印数据
            System.out.println("id: " + id + ", name: " + name + ", age: " + age + ", gender: " + gender);
        }

        //释放资源
        rs.close();
        pstmt.close();
        conn.close();
    }

    public static void update(int id, String name, int age, String gender) throws Exception {
        //1.注册驱动
        // Class.forName("com.mysql.jdbc.Driver");
        Class.forName("com.mysql.cj.jdbc.Driver");
        // 修改部分结束

        //2.获取连接
        String url = "jdbc:mysql://localhost:3306/demo"; // 移除多余的空格
        String username = "root";
        String password = "root";

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

        //System.out.println(conn); //测试是否连接上mysql数据库

        //3.定义sql语句
        String sql = "UPDATE tb_demo SET name = ?, age = ?, gender = ? WHERE id = ?";
        PreparedStatement pstmt = conn.prepareStatement(sql);
        pstmt.setString(1, name); // 设置新的名字
        pstmt.setInt(2, age); // 设置新的年龄
        pstmt.setString(3, gender); // 设置新的性别
        pstmt.setInt(4, id); // 设置更新条件,假设根据 id 来更新数据

        //执行更新操作
        int count = pstmt.executeUpdate(); // 影响行数

        //处理结果
        //System.out.println(count > 0);

        //释放资源
        pstmt.close();
        conn.close();
    }
}

算法

一.离散化

相关知识【算法基础——第八讲】离散化_离散化算法-CSDN博客

关键代码(映射 + 排序去重)

//映射
int getidx(int x)
{
    return lower_bound(X.begin(), X.end(), x) - X.begin() + 1;
}


//排序去重
sort(X.begin(), X.end());
X.erase(unique(X.begin(), X.end()), X.end());

二.树状数组 

相关知识:树状数组(详细分析+应用),看不懂打死我!-CSDN博客

个人板子及理解

代码 

#include <bits/stdc++.h>
using namespace std;
using ll  = long long
const int N = 1e5 + 9;

ll a[N], t[N];
int n, q;

int lowbit(int x) {return x & (-x);} //找出与所有与该点相关的覆盖区间

void update(int k, ll x)
{
    for(int i = k; i <= n; i += lowbit(i)) t[i] += x; //单点更新后随之更新覆盖区间
}

ll getsum(ll k)
{
    ll res = 0;
    for(int i = k; i > 0; i -= lowbit(i)) res += t[i]; 
    return res;
}


int main ()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    cin >> n >> q;
    for(int i = 1; i <= n; ++ i) cin >> a[i];
    for(int i = 1; i <= n; ++ i) update(i, a[i]);

    while(q --)
    {
        int op; cin >> op;
        if(op == 1)
        {
            ll k, x; cin >> k >> x;
            update(k, x);
        }
        else
        {
            ll l, r; cin >> l >> r;
            cout << getsum(r) - getsum(l - 1) << '\n'; //前缀和思想
        }
    }
    return 0;
}

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值