学习心得

学习JDBC,先把jbr包引进去,8.0之后的用8.0的,之前的可以用5.7或者更早的,8和之前的有区别,Driver 的class地方不一样。

 

 

 

掌握情况

还行


 

学习总结如下
 

聚合函数

count:计数。 count(*) 约等于 count(1)> count(主键)【普通情况下】

  • count(*):MySQL对 count(*)底层优化,count(0)。
  • count(1)
  • count(主键)
  • count(字段)

min:最小值

max:最大值

sum:求和

avg:平均值

数值型函数

主要是对数值型进行处理

ceiling:向上取整

floor:向下取整

round:四舍五入

truncate(x,y):返回数字值x截断为y位小数的结果

Pl:圆周率,Π pai

rand:返回0-1之间的随机数

abs:绝对值

-- 绝对值
select ABS(-4) 4的绝对值,ABS(-1.1);
-- 向下取整,向上取整,四舍五入
select CEILING(4.1),FLOOR(1.1),ROUND(-4.4)
-- 取余
select MOD(60,11);
-- 随机数
select RAND(),RAND(),RAND()
-- 截断
select TRUNCATE(2.33999999,2);

字符串型函数

对字符串进行处理

length(s):字符串的长度

concat(s1,s2,s3......sn):合并字符串

lower(str):将字母转成小写

upper(str):将字母转成大写

left(str,x):返回字符串str从左开始要x个字符

right(str,x):返回字符串str从右开始要x个字符

trim:去掉左右两边的空格

replace:替换

substring:截取

reverse:反转

select LEFT('abcdefg',2);
select RIGHT('abcdefg',2);
select REVERSE('hijklmn');
select REPLACE('abcdefg','abc','x');

日期和时间函数

date, time, datetime, timestamp, year

获取时间和日期

  • 【curdate】和【current_date】,返回当前的系统日期。
  • 【curtime】和【current_time】,返回当前的系统时间。
  • 【now】和【sysdate】,返回当前的系统时间和日期。
select CURRENT_DATE();
select CURTIME();
select now();

时间戳和日期转换函数

【UNIX_TIMESTAMP()】获取unix时间戳函数

【FROM_UNIXTIME()】将时间戳转换为时间格式

select UNIX_TIMESTAMP();
select FROM_UNIXTIME(1660785720);

根据日期获取年月日的数值

select MONTH(SYSDATE());
select MONTHNAME(SYSDATE());
select DAYNAME(SYSDATE());
select DAYOFWEEK(SYSDATE());
select WEEK(SYSDATE());
select DAYOFMONTH(SYSDATE());
select YEAR(SYSDATE());

时间日期的计算

-- 日期加法
select DATE_ADD(SYSDATE(),INTERVAL 70 DAY);
-- 日期减法
select DATE_SUB(SYSDATE(),INTERVAL 10 DAY);
-- 时间间隔
select DATEDIFF('2023-01-01',SYSDATE());
-- 日期格式化
select DATE_FORMAT(SYSDATE(),'%W %M %D %Y');

加密函数

-- 把传入的参数的字符串按照md5算法进行加密,得到一个32位的16进制的字符串
select MD5('123456');

md5算法是不可逆的。

流程控制函数

可以进行条件判断,用来实现SQL语句的逻辑。

  • if(test,t,f):如果test是真,则返回t,否则返回f
  • ifnull(arg1,arg2):如果arg1不是空,返回arg1,否则返回arg2
  • nullif(arg1,arg2):如果arg1=arg2返回null,否则返回arg1
select IF(2 > 1,'a','b');
select IFNULL(sal,0);
select NULLIF(age,0);

对一系列的值进行判断:

-- 输出学生的各科的成绩,以及评级,60以下D,60-70是C,71-80是B,80以上是A
SELECT
    *,
CASE
        
        WHEN score < 60 THEN 'D' WHEN score >= 60 
        AND score < 70 THEN 'C' WHEN score >= 70 
            AND score < 80 THEN 'B' WHEN score >= 80 THEN
                'A' 
            END AS '评级' 
    FROM
    mystudent;
-- 行转列
SELECT
    user_name,
    max( CASE course WHEN '数学' THEN score ELSE 0 END ) '数学',
    max( CASE course WHEN '语文' THEN score ELSE 0 END ) '语文',
    max( CASE course WHEN '英语' THEN score ELSE 0 END ) '英语' 
FROM
    mystudent 
GROUP BY
    user_name


JDBC:

1.数据库的驱动:java.sql.Driver接口,所有驱动程序需要实现的接口

2.URL地址:

        jdbc协议

        jdbc:mysql://主机名称 : 端口号/数据库名

        jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding =utf8

                  8.0版本还需要传参useSSL=false&serverTimezone = UTC

3.用户名:root

4.密码:root

这个是8.0版本的,之前的就直接把&后面的东西删掉,上面类的包里的cj去掉就可以

显示数据库连接成功,就是可以在Java里面操作MySQL库的东西,

自己在NaviCat里面建个表,在Java里面插入删除修改都可以

连接:

import org.junit.Test;


import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Objects;
import com.mysql.cj.jdbc.Driver ;


public class Ch01 {
    @Test
    public void test02() throws ClassNotFoundException, SQLException {
        // 数据库的url
        String url = "jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone = UTC";
        String username = "root";
        String password = "root";
        // 驱动的全类名
        String driverName = "com.mysql.cj.jdbc.Driver";


        // 1.加载驱动类
        Class.forName(driverName);
        // 4.获取连接
        Connection connection = DriverManager.getConnection(url, username, password);
        System.out.println(connection);
        System.out.println(Objects.nonNull(connection) ? "数据库连接成功" : "数据库连接失败");

执行数据库的DML语句--增删改

java中三个接口分别定义了对数据库的调用的不同的方式:

1.Statement:用来执行静态sql语句并返回它所生成的结果对象

2.PrepareStatement:预编译,可以使用此对象多次高效的执行该语句

3.CallableStatement:用来执行sql存储过程

先建一个jdbc.properties 里面写:

 

mysql.url = jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone = UTC
mysql.username = root
mysql.password = root
mysql.driverName = com.mysql.cj.jdbc.Driver

 

属性文件的好处

public class Ch01 {


  @Test
  public void test02() throws ClassNotFoundException, SQLException, IOException {


    /*
      使用属性文件的好处:
       1、实现了代码和数据的分离,如果需要修改配置信息,直接在属性文件中修改即可,不需要深入代码
       2、如果修改了配置信息,省去了编译的过程
     */
    Properties properties = new Properties();


    // 读取外部的properties属性文件
    // 记住就好,复制粘贴就好
    properties.load(Ch01.class.getClassLoader().getResourceAsStream("jdbc.properties"));


    String url = properties.getProperty("mysql.url");
    String driverName = properties.getProperty("mysql.driverName");
    String username = properties.getProperty("mysql.username");
    String password = properties.getProperty("mysql.password");


//    // 1.加载驱动类
    Class.forName(driverName);
//    // 4.获取连接
    Connection connection = DriverManager.getConnection(url, username, password);
    System.out.println(connection);
    System.out.println(Objects.nonNull(connection) ? "数据库连接成功" : "数据库连接失败");
  }


  @Test
  public void test01() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException, SQLException {
    // 数据库的url
        String url = "jdbc:mysql://127.0.0.1:3306/jsoft?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone = UTC";

 
String username = "root"; String password = "root"; // 驱动的全类名 String driverName = "com.mysql.jdbc.Driver"; // 1.加载驱动类 Class clazz = Class.forName(driverName); // 2.实例化Driver对象 Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance(); // 3.注册驱动  DriverManager.registerDriver(driver); // 4.获取连接 Connection connection = DriverManager.getConnection(url, username, password); System.out.println(connection); System.out.println(Objects.nonNull(connection) ? "数据库连接成功" : "数据库连接失败");

 String sql = "INSERT INTO teacher (name) VALUES ('Jay')";这个是添加操作

public class Ch02 {


    @Test
    public void test01(){
        // 1.获取连接
        Connection conn = null;
        Statement stmt = null;
        try {
            conn = JDBCUtil.getConnection();
            stmt = conn.createStatement();
            // 2.执行sql语句
            String sql = "INSERT INTO teacher (name) VALUES ('Jay')";
            // 修改
            sql = "UPDATE teacher SET name = 'JJ' where id = 7";
            sql = "select * from teacher";
            // 返回值是执行sql语句影响的行数
            int i = stmt.executeUpdate(sql);
            // 3.处理执行sql的返回值
            System.out.println(i);
            System.out.println("操作成功...");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
           JDBCUtil.close(conn,stmt);
        }
    }
}

也可以查询,在Java中打印出来

import org.junit.Test;


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


public class Ch03 {


    @Test
    public void test01() {
        // 1.获取连接
        Connection conn = JDBCUtil.getConnection();
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 2.获取可以执行sql语句的stmt对象
            stmt = conn.createStatement();
            // 3.定义sql
            String sql = "select id tid,name tname from teacher ";
            // 4.执行查询的sql,会得到一个ResultSet
            // ResultSet就是封装了查询结果的一个对象
            rs = stmt.executeQuery(sql);
            // 5.遍历结果集ResultSet
            while(rs.next()) {
                int id = rs.getInt("tid");
                String name = rs.getString("tname");
                System.out.println("id:" + id + ",name:" + name);
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } finally {
            // 6.关闭资源
            JDBCUtil.close(conn,stmt,rs);
        }

 

 

 当然,首先需要在自己的navicat中建一个有数据的表,
















posted on 2022-08-18 20:06  骐琳  阅读(25)  评论(0编辑  收藏  举报

你点我就回上面去了ヾ(≧O≦)〃嗷~