IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> “21天好习惯”第一期-3 -> 正文阅读

[大数据]“21天好习惯”第一期-3

学习内容一:JDBC(c3p0&druid&JdbcTemplate)

学习了jdbc的两种连接池技术及依赖于数据库连接池的Spring JDBC JdbcTemplate,并进行了一些练习

1.代码部分(druid):

(1)DruidDemo1类

package datasource.druid;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.sql.Connection;
import java.util.Properties;

public class DruidDemo1 {
    public static void main(String[] args) throws Exception {
        Properties pro = new Properties();
        pro.load(new FileReader("C:\\Users\\GG\\IdeaProjects\\demo13\\druid\\src\\druid.properties"));
        DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//配置文件中设置的连接数量最大值为10,修改i为11运行后会报错
        for(int i = 1;i<=10;i++){
            Connection conn = ds.getConnection();
            System.out.println(i+" : "+conn);
        }

    }
}

运行结果:

?

(2)Druid的工具类:JDBCUtils类

package utils;

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.FileReader;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;

public class JDBCUtils {
    private static DataSource ds;

    static{
        try {
            Properties pro = new Properties();
//            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            pro.load(new FileReader("C:\\Users\\GG\\IdeaProjects\\demo13\\druid\\src\\druid.properties"));
            ds = DruidDataSourceFactory.createDataSource(pro);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    public static void close(PreparedStatement pstmt, Connection conn){
        if(pstmt!=null){
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static void close(ResultSet rs, PreparedStatement pstmt, Connection conn){
        if(rs!=null){
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(pstmt!=null){
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }

        if(conn!=null){
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }

    public static DataSource getDataSource(){
        return ds;
    }
}

(3)基于JDBCUtils工具类的Druid类:DruidDemo2类

package datasource.druid;

import utils.JDBCUtils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;


public class DruidDemo2 {
    public static void main(String[] args) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        try { 
            conn = JDBCUtils.getConnection();
            String sql = "insert into stu values(?,?)";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,"HHHHHH");
            pstmt.setString(2,"6666666");
            int count = pstmt.executeUpdate();
            System.out.println(count);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            JDBCUtils.close(pstmt,conn);
        }
    }
}

运行结果

?

代码量相对于原本少了许多

2.JdbcTemplate

(1)JDBCTemplateDemo1

package datasource.JDBCTemplate;

import org.springframework.jdbc.core.JdbcTemplate;
import utils.JDBCUtils;

public class JDBCTemplateDemo1 {
    public static void main(String[] args) {
        JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
        String sql = "Update stu set password=? where username=?";
        int count = jdbcTemplate.update(sql, "1225500102", "LISA");
        System.out.println(count);
    }
}

运行结果

?

代码量又少了一点

(2)定义了一个Emp类

package domain;

public class Emp {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "Emp{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

(3)JdbcTemplateDemo2(对JdbcTemplate中常用方法的一些练习)

package datasource.JDBCTemplate;

import domain.Emp;
import org.junit.Test;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import utils.JDBCUtils;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;

public class JdbcTemplateDemo2 {

    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());
    /**
     * 修改用户Henry的密码为123456
     */
    @Test
    public void test1(){
        String sql = "update stu set password=? where username=?";
        int count = jdbcTemplate.update(sql,"123456","Henry");
        System.out.println(count);
    }

    /**
     * 添加一条记录
     */
    @Test
    public void test2(){
        String sql = "insert into stu values(?,?)";
        int count = jdbcTemplate.update(sql,"Hu","654321");
        System.out.println(count);
    }

    /**
     * 删除刚才添加的记录
     */
    @Test
    public void test3(){
        String sql = "delete from stu where username=?";
        int count = jdbcTemplate.update(sql,"Hu");
        System.out.println(count);
    }

    /**
     * 查询一条记录
     * jdbcTemplate.queryForMap只能查询一条记录,然后将该记录中的每个属性变为一个 名称-值 的键值对封装为map
     */
    @Test
    public void test4(){
        String sql = "select * from stu where username=?";
        Map<String, Object> map = jdbcTemplate.queryForMap(sql, "Henry");
        System.out.println(map);
    }

    /**
     * 查询所有记录
     */
    @Test
    public void test5(){
        String sql = "select * from stu";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> map : list) {
            System.out.println(map);
        }
    }

    /**
     * 查询所有的记录(将其封装为Emp对象的List集合)
     */
    @Test
    public void test6(){
        String sql = "select * from stu";
        List<Emp> list = jdbcTemplate.query(sql, new RowMapper<Emp>() {
            @Override
            public Emp mapRow(ResultSet rs, int i) throws SQLException {
                Emp emp = new Emp();
                String username = rs.getString("username");
                String password = rs.getString("password");
                emp.setUsername(username);
                emp.setPassword(password);
                return emp;
            }
        });
        for(Emp emp:list){
            System.out.println(emp);
        }
    }

    /**
     * 查询所有的记录(将其封装为Emp对象的List集合,且不用自己实现RowMapper接口,括号内要放入对象的字节码)
     */
    @Test
    public void test7(){
        String sql = "select * from stu";
        List<Emp> list = jdbcTemplate.query(sql, new BeanPropertyRowMapper<Emp>(Emp.class));
        for(Emp emp:list){
            System.out.println(emp);
        }
    }

    /**
     * 查询总记录数
     * queryForObject一般是用来执行聚合函数的(括号内要放入类型的字节码)
     */
    @Test
    public void test8(){
        String sql = "select count(username) from stu";
        Long total = jdbcTemplate.queryForObject(sql,Long.class);
        System.out.println(total);
    }
}

可见在框架下的JDBC代码量又少了许多,或许懒惰才是第一生产力。

运行结果

test1 ==?test2 == test3

test4

test5 == test6 == test7

test8

?

学习内容二:算法学习(前缀和)

Accepted!

1.一维前缀和

输入一个长度为?nn?的整数序列。

接下来再输入?mm?个询问,每个询问输入一对?l,rl,r。

对于每个询问,输出原序列中从第?ll?个数到第?rr?个数的和。

输入格式

第一行包含两个整数?nn?和?mm。

第二行包含?nn?个整数,表示整数数列。

接下来?mm?行,每行包含两个整数?ll?和?rr,表示一个询问的区间范围。

输出格式

共?mm?行,每行输出一个询问的结果。

数据范围

1≤l≤r≤n1≤l≤r≤n,
1≤n,m≤1000001≤n,m≤100000,
?1000≤数列中元素的值≤1000?1000≤数列中元素的值≤1000

输入样例:

5 3
2 1 3 6 4
1 2
1 3
2 4

输出样例:

3
6
10

代码部分:

#include <iostream>

using namespace std;

const int N = 100010;

int a[N];

int main()
{
? ? int n,m;
? ? scanf("%d%d",&n,&m);
? ? for(int i=1;i<=n;i++)
? ? {
? ? ? ? scanf("%d",&a[i]);
? ? ? ? a[i]+=a[i-1];
? ? }
? ? while(m--)
? ? {
? ? ? ? int l,r;
? ? ? ? scanf("%d%d",&l,&r);
? ? ? ? printf("%d\n",a[r]-a[l-1]);
? ? }
? ? return 0;
}

2.二维前缀和

输入一个?nn?行?mm?列的整数矩阵,再输入?qq?个询问,每个询问包含四个整数?x1,y1,x2,y2x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。

对于每个询问输出子矩阵中所有数的和。

输入格式

第一行包含三个整数?n,m,qn,m,q。

接下来?nn?行,每行包含?mm?个整数,表示整数矩阵。

接下来?qq?行,每行包含四个整数?x1,y1,x2,y2x1,y1,x2,y2,表示一组询问。

输出格式

共?qq?行,每行输出一个询问的结果。

数据范围

1≤n,m≤10001≤n,m≤1000,
1≤q≤2000001≤q≤200000,
1≤x1≤x2≤n1≤x1≤x2≤n,
1≤y1≤y2≤m1≤y1≤y2≤m,
?1000≤矩阵内元素的值≤1000?1000≤矩阵内元素的值≤1000

输入样例:

3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4

输出样例:

17
27
21

代码部分 :

#include <iostream>

using namespace std;

const int N = 1010;

int a[N][N];

int main()
{
? ? int n,m,q;
? ? scanf("%d%d%d",&n,&m,&q);
? ? for(int i=1;i<=n;i++)
? ? ? ? for(int j=1;j<=m;j++)
? ? ? ? ? ? scanf("%d",&a[i][j]);
? ? for(int i=1;i<=n;i++)
? ? ? ? for(int j=1;j<=m;j++)
? ? ? ? ? ? a[i][j]+=a[i-1][j]+a[i][j-1]-a[i-1][j-1];
? ? while(q--)
? ? {
? ? ? ? int x1,y1,x2,y2;
? ? ? ? scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
? ? ? ? printf("%d\n",a[x2][y2]-a[x2][y1-1]-a[x1-1][y2]+a[x1-1][y1-1]);
? ? }
? ? return 0;
}

学习内容三:信息技术知识学习

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:16:31  更:2021-10-26 12:17:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 2:25:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码