2022年05月14日报告

2022年05月08日我们讲到了多表查询 同学们

目录

1.Mysql视图

2.JDBC

3.数据库连接池

4.JDBCTemplate


1.Mysql视图

创建一个视图,可以把查询结果保存起来

# 找到所有工作与艾本相同的人
create view xq_view1
as
select *
from emp
where job=(select job from emp where ename='艾本');

然后你就会发现多了一个 view文件夹 里面是你刚创建的视图 

如果视图中的数据来自一个表 改变视图中的数据原表也会跟着改变

如果来自多个表就没有影响

2.JDBC

JDBC可以将mysql和JAVA连接起来

我们要先写一个class

然后在给class所在的项目导包

 

package com.langsin.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class jdbc {
        // 这是我们创建的类
    public static void main(String[] args) throws Exception {
        // 1.加载驱动 新版本不需要添加了
        Class.forName("com.mysql.cj.jdbc.Driver");

        // 2.获取数据库连接对象 需要三个参数 username password url
        String username = "root";
        String password = "";   // 这个是自己MYSQL的密码
        String url = "jdbc:mysql://localhost:3306/e82?useUnicode=true&characterEncoding=UTF8&serverTimezone=Hongkong";
        Connection connection = DriverManager.getConnection(url, username, password);
        // System.out.println(connection);
        // 如果出现java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver
        // 说明没有驱动导包
        // 下面就可以写SQL语句了
        Statement statement = connection.createStatement();
        // 建议把SQL语句写在一个字符串里
        // 这样有提示
        // 这样我们往数据库里加了一条数据
//        String sql= "insert into products values (null ,'食物7',current_timestamp )";
//        int count = statement.executeUpdate(sql);
//        System.out.println(count);
        
        // 这样可以读到表里的数据
        String sql="select * from products;";
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()){
            System.out.println(resultSet.getInt(1)+"\t-\t"+resultSet.getString("pro_name")+"-"+resultSet.getTimestamp(3));
        }
    }
}

这样就可以在JAVA里操作MYSQL了

3.数据库连接池

据说我们频繁地连接数据库消耗的资源太多了

所以我们可以使用连接池 

一次建立很多连接,连接用完了就还给连接池

首先我们要在文件的src下面建一个配置文件 名字叫druid.properties

// 然后把自己的用户名 密码 url 写进去
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/e82?useSSL=false&serverTimezone=Hongkong
username=XXXXXXXXXX
password=XXXXXXXXXX

然后写一个类叫DruidUtils

把这些代码粘贴进去

//1.定义成员变量 DataSource
private static DataSource ds;

static {
    try {
        //1.加载配置文件
        Properties pro = new Properties();
        pro.load(DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
        //2.获取DataSource
        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(Statement stmt, Connection conn) {
      /* if(stmt != null){
           try {
               stmt.close();
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }

       if(conn != null){
           try {
               conn.close();//归还连接
           } catch (SQLException e) {
               e.printStackTrace();
           }
       }*/

    close(null, stmt, conn);
}


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


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

    if (conn != null) {
        try {
            conn.close();//归还连接
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

/**
 * 获取连接池方法
 */
public static DataSource getDataSource() {
    return ds;
}

再给当前目录导包 druid-1.1.12

把所有系统提示的需要导包的地方都导完以后 小编发现这里还报错

ds = DruidDataSourceFactory.createDataSource(pro);

导包加上这一句貌似就可以了

import com.alibaba.druid.pool.DruidDataSourceFactory;

然后在我们的测试类中 就可以这样获取连接了

public class Demo {
    public static void main(String[] args) throws Exception {
        Connection connection = DruidUtils.getConnection();
        System.out.println(connection);
        JdbcUtils.close(null, null, connection);
    }
}

如果获取连接成功 可以输出这个

com.mysql.cj.jdbc.ConnectionImpl@6e20b53a

4.JDBCTemplate

它是Spring框架对JDBC的封装

 

据说可以简化把查询结果放到对象里的过程

首先我们要导包

然后就可以用了

在用的时候我们需要之前那个连接池对象

public class JdbcTemplateDemo {
    public static void main(String[] args) {
        // 这样可以完成一个插入操作
        JdbcTemplate jdbcTemplate = new JdbcTemplate(DruidUtils.getDataSource());
        // 表里的参数用?代替就可以
        String sql="insert into products values (null ,?,?)";
        // 在sql后面给参数赋值
        jdbcTemplate.update(sql,"食物10","2022-04-03 13:32:25");
    }
}

 

 // 这样我们可以把1-4的产品名字全改成"食物"

String sql1="update products set pro_name=? where id<?";
jdbcTemplate.update(sql1,"食物",5);
// 这样我们可以查询到id为1 的产品信息
// 查询结果被放到一个Map集合里了
// 这个queryForMap()只能查一个产品
String sql="select * from products where id=1 ";
Map<String, Object> stringObjectMap = jdbcTemplate.queryForMap(sql);
System.out.println(stringObjectMap);

 

 // 用queryForList()可以查所有的产品

String sql="select * from products;";
List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
maps.forEach(System.out::println);

 

JDBCTemplat还可以把查询出来的结果放到对象里去

再把对象放到List集合里去

先把对象的类写好 里面加上属性和get set方法

// 然后在测试类里这样写
String sql="select * from products";
List<Product> query = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Product.class));
query.forEach(System.out::println);
// 这样写可以从表里拿出来一个结果 把它变成对象
String sql="select * from products where id=1";
Product product = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Product.class));
System.out.println(product);

 

THE END ψ(*`ー´)ψ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蒂法挤挤挤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值