栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

“21天好习惯”第一期-3

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

“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());
    
    @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);
    }

    
    @Test
    public void test4(){
        String sql = "select * from stu where username=?";
        Map map = jdbcTemplate.queryForMap(sql, "Henry");
        System.out.println(map);
    }

    
    @Test
    public void test5(){
        String sql = "select * from stu";
        List> list = jdbcTemplate.queryForList(sql);
        for (Map map : list) {
            System.out.println(map);
        }
    }

    
    @Test
    public void test6(){
        String sql = "select * from stu";
        List list = jdbcTemplate.query(sql, new RowMapper() {
            @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);
        }
    }

    
    @Test
    public void test7(){
        String sql = "select * from stu";
        List list = jdbcTemplate.query(sql, new BeanPropertyRowMapper(Emp.class));
        for(Emp emp:list){
            System.out.println(emp);
        }
    }

    
    @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

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("%dn",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

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("%dn",a[x2][y2]-a[x2][y1-1]-a[x1-1][y2]+a[x1-1][y1-1]);
    }
    return 0;
}

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

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/348881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号