JDBC学习笔记-MySql

要求:

  1. Java建包,对数据库操作的jdbc代码的包名“cn.java.dao.impl”

  2. 实体类,包名“cn.java.entity"

  3. 工具类,包名“cn.java.utils"

配置智能模板

  1. 提示:

    Windows -> Preferences -> java -> editor -> Content Assist -> -> 在倒数第二行的“.”后加aZ和09

  2. 注释模板:

    Windows -> Preferences -> java-> Code Style -> Code Templates -> import -> 导入 -> Windows -> Preferences -> java -> Editor -> Save Actions -> 选中:Format all lines

  3. 格式模板:

    Windows -> Preferences -> java-> Code Style -> Formatter -> import ->

一、 前期准备

1.1 反射

###1.1.1 获取字节码文件的方式:

  1. 对象名.getClass();

    Class c1 = user1.getClass();

  2. 类名.class;

    Class c2 = User.class;

  3. Class.forName(“字节码的全路径”);

    Class c3 = Class.forName(路径);

1.2 多线程

1.2.1 概念

  1. 进程:

    正在执行的程序

  2. 线程:

    线程是进程的控制单元,一个进程可能有多个线程。

1.2.2 实现线程的两种方式

  1. 继承Thread类:

    第一步:书写普通类,继承thread类

    第二步:重写thread类中的run方法,run方法中存放任务代码

    第三步:启动线程:对象名.start();

  2. 实现Runnable接口:

    第一步:书写普通类,实现runnable接口

    第二步:实现runnable接口中的run方法,run方法中存放任务代码

    第三步:启动线程:先创建Thread对象,对象名.start();

    Test1 test1 = new Test1();
    Test1 test2 = new Test2();
    
    Thread ts1 = new Thread(test1);
    Thread ts2 = new Thread(test2);
    
    ts1.state();
    ts2.state();

1.2.3 线程安全问题:上锁

  1. 出现条件:

    多个线程操作同一共享数据

  2. 解决方法:

    给完成某一任务的代码块上锁

        synchronized(类名.class){

            语句体

        }

二、 SQL语言

数据类型

  1. 整形

    1. int

      1. int(m):m表示预期值,与储存大小和数值的范围无关

      2. zerofill 零填充,会在左侧补0(不是数据类型,不能单独使用)

         eg:
        
         id int(3) zerofill 当输入的id为“1”时,储存为“001”,当输入为“1000”时,zerofill不起作用
        
    2. tinyint:1字节

    3. smallint:2字节

    4. bigint:8字节

    5. mediumint:3字节

  2. 浮点型

    1. float

    2. double

  3. 字符型

    1. char(m):固定长度的字符串类型,不只是一个字符

    2. varchar(m):可变长度的字符串类型

    3. text:大的字符串类型,4G字符串

    4. blob:字节类型

  4. 日期

    1. date:日期类型,年月日

    2. time:实践类型,时分秒

    3. year:年份,年

    4. timestamp:年月日 时分秒, 时间戳

    5. datetime:年月日 时分秒

编程语言

  1. DDL:数据定义语言

    1. create

    2. drop

    3. alter

  2. DML:数据操作语言

    1. insert

    2. delete

    3. update

  3. DQL:数据查询语言

    1. select
  4. TCL:事务控制语言

    1. commit:提交事务

    2. rollback:事务回滚

    3. savepoint:事务节点

  5. DCL:数据控制语言

    1. grant:授权

    2. revoke:收权

2.0 分类

  1. DQL:查询预压

  2. DML:操作语言

  3. DDL:定义语言

2.1 库操作

  1. 创建库:

    create database 库名 ;

    创建指定编码的库:

    create database 库名 character set 编码名;

    创建指定编码指定排序集的库:

    create database 库名 character set 编码名 collate utf8_general_ci;

  2. 删除库:

    drop database 库名;

  3. 查库的创建信息:

    show create database 库名;

  4. 更改库的编码方式:

    alert database 库名 character set 编码名;

2.2 表操作

  1. 创建表:

    create table 表名(

     字段 数据类型,
    
     字段 数据类型,
    
     primary key(已有字段)【注意:设置主键时,所有的主键为bigint,占20字节,写法:bigint(20)】
    

    );

  2. 删除表:

    drop table 表名;

  3. 修改表:

    1. 修改表名:

      rename table 旧表名 to 新表名;

    2. 添加字段:

      alter table 表名 add 字段名 数据类型;

    3. 删除字段:

      alter table 表名 drop 字段名;

    4. 更改字段名:

      alter table 表名 change column 旧字段名 新字段名 数据类型;

    5. 修改字段数据类型:

      alter table 表名 modify 字段名 新数据类型;

  4. 查询表结构(包括表中的字段和字段数据类型):

    desc 表名;

  5. 查询表结构(建表的源代码):

    show create table 表名;

  6. 复制表:

    create table 表名(select * from 表名);

    特点:没有了主键和自增

    添加逐渐和自增:

2.2.1 其它关键字

  1. not null

  2. auto_increment

  3. default 默认值

  4. comment 注释内容

2.3 数据操作

  1. 添加数据:

    1. insert into 表名(字段列表) value(参数列表);

    2. insert into 表名 set 字段1=参数1,字段2=字段2…;

  2. 修改数据:

    update 表名 set 字段名1=新值,字段名2=新值 where 关系表达式

  3. 删除数据:

    delete from 表名 where 条件表达式

    truncate table 表名 【删除全部数据,全部重新录入】

  4. 查询数据:

    select 字段名 [[as] 别名] from 表名 where 条件表达式

2.4 cmd操作Mysql(先配置路径)

  1. 查看有多少库:

    show databases;

  2. 使用库(表示选中):

    use 表名

  3. 查看当前停留在哪个库:

    1. select database();

    2. \s(更全面)

  4. 查看有多少表:

    show tables;

2.5 MySQL查询:

2.5.1 聚合函数

  1. 函数调用:

    select 函数名(参数值1,参数值2) [其它]

    1. count:统计某个参数的个数

      select count(userName) as 名字出现次数 from person;

      select count(*) as 总记录数 from person;

    2. max

    3. min

    4. avg

    5. sum

2.5.2 常用函数

  1. concat(str1,str2…str3):拼接字符串

  2. NOW():获取当前的系统时间

  3. curDATE():获取当前日期

  4. curDTIME():获取当前时间

  5. rand():小数随机数

2.5.3 模糊查询

select 字段名1,字段名2…from 表名 where 字段名 like 条件;(以%为通配符)

2.5.4 分页查询

  1. select * from table limit n(条数)

  2. select * from table limit index,pageSize;

    【index = (pageNo-1)*怕个Size】

2.5.5 排序查询

select * from 表名 [条件] order by 排序字段 desc/asc ;

2.5.6 联合查询:union

  1. select * from 表1 where id in (1,2,3)

union

select * from 表2 where id in (1,2,3,)

-> 查询的结果去重:完全相同的数据只显示一次

  1. select * from 表1 where id in (1,2,3)

union all

select * from 表2 where id in (1,2,3,)

-> 查询的结果全部显示:完全相同的数据显示多次;

2.5.7 连接查询(面试题)

  1. 内连接:

    select * from 表1 别名1 inner join 表2 别名2 on 连接条件 where 筛选条件

  2. 外连接

    1. 左连接:

      select * from 表1 别名1 left join 表2 别名2 on 连接条件 where 筛选条件

    2. 右连接:

      select * from 表1 别名1 right join 表2 别名2 on 连接条件 where 筛选条件

2.6 自定义函数

  1. 语法:

    delimiter //【自定义结束符,否则SQL默认;为语句结束符,将函数内的第一条语句视为函数体】

    create function 函数名(参数名1 参数类型,参数名2 参数类型…) returns 数据类型

    begin

     declare result 返回类型 default 初始值;【声明变量和赋初始值】  
    
     SELECT money INTO ruslt FROM bankaccount WHERE id=ueserId;【变量赋值(实际例子)】  
    

    end//

    delimiter ;【将结束符改回来】

  2. 调用:

    select 函数名(实参);

  3. 删除:

    drop function 函数名;

2.6.1 if

  1. 语法:

    if 条件表达式 then

     SQL语句体  
    

    elseif 条件表达式 then

     SQL语句体  
    

    else

     SQL语句体  
    

    end if

2.6.2 while

  1. 语法:

    while 条件表达式 do

     SQL语句  
    

    end while;

2.6.3 switch

  1. 语法:

    case 标志

     when 实际 then   
    
         sql  
    
     else    
    
         sql  
    

    end case

2.6.4 自增

  1. 语法:

    set i = i+1;

2.7 储存过程

  1. 语法:

    delimiter //【自定义结束符,否则SQL默认;为语句结束符,将函数内的第一条语句视为函数体】

    create procedure 存储过程名(参数名1 参数类型,参数名2 参数类型…) 【没有返回值类型】

    begin

     declare result 返回类型 default 初始值;【声明变量和赋初始值】  
    
     SELECT money INTO ruslt FROM bankaccount WHERE id=ueserId;【变量赋值(实际例子)】  
    

    end//

    delimiter ;【将结束符改回来】

  2. 调用:

    call 存储过程名(实参);

  3. 删除:

    drop procedure 存储过程名

2.8 触发器

2.9 约束

  1. default

  2. not null

  3. unique

  4. primary key

  5. foreign key

  6. check:检查约束(MySQL不支持)

  7. auto_increment

  8. unsigned:无符号约束。指定当列的数值为非负数

  9. zerofill:零填充约束

三、 JDBC

3.1 连接数据库

  1. Java连接SQL server

  2. 连接MySQL:

    1. 通过第三方连接:

      如果mysql数据库被关闭了,通过sqlyog是连接不上的,需要手动开启Mysql服务器:windows+r—>services.msc调出服务选项

    2. MySQL自带

    3. CMD

3.2 Junit单元测试

当只是测试一个方法能不能跑通:

在该实例方法方法上写“@Test”,会报错,然后鼠标放上去,选中Junit。之后选中方法名右键运行即可。

规范写法

public void 方法名(){代码块}    【没有参数,不能用static】

3.3 JDBC操作步骤

  1. 导入驱动包

    选中工程 -》 右键 -》 New -》 Folder -》 在Folder name处填写:lib -》 把驱动包复制到lib中 -》 选中驱动包右键 -》 Build Path -》 Add to Build Path -》 在lib文件上方出现个“小奶瓶 ”

  2. 加载驱动

    Class.forName(“com.mysql.jdbc.Driver”);

  3. 连接数据库

    DriverManager.getConnerction(“jdbc:mysql://localhost:3306/数据库名”, 用户名, 密码)【需要导包,选Java.sql的那个】

    由于Java中万物皆对象,故该连接过程也是个对象,称为“Connection对象”

  4. 书写SQL语句,执行SQL语句,接受反馈

    String sql = “原模原样的sql语句”

    //创建一个车

    Statement st = conn.createStatement();

    //将sql装车、开车

    int result = st.exeuteUpdate(sql);

    if(result >= 1){

     System.out.println("数据添加成功");  
    

    }else{

     System.out.println("数据添加失败");
    

    }

    ResultSet rs = st.executeQuery(sql);

    ResultSet主要有两个方法:getObject()

    方法中的参数名称要与数据库空表字段名称一样

    如果数据库中是Date类型,使用String类型接收

  5. 关闭连接

    st.close();

    conn.close();

3.4 配置文件properties(不能放到表下)

存放位置:new -> Source Folder -> 命名为conf或resource -> new -> file ->名字以".properties"结尾

  1. 特点:

    1. 只能以“key=value”的形式书写,一行一对

    2. 只有字符串类型

  2. 读取:

    第一步:创建properties对象,用来表示properties文件

     1. 将对象与实际内容关联  
    
     2. 将关联后的对象变成流  
    

    第二步:通过对象中的方法读取数据

3.5 静态代码块(面试点)

  1. 语法

     static {
    
    
    
     }
    
  2. 特点:在构造方法前先执行

四、 数据库

4.1.时间转换函数

  1. 语法:

    date_format(date,format);

    此函数将date的类型转换为字符串

    select date_foramt(publishTime,"%Y/%m%d %H:%i") from goods;

4.2 事务(transaction):

  1. 定义:多步操作为一个整体,不能分割

  2. 操作步骤:

    1. 开启事务:start transaction

    2. 【回滚事务:rollback】(回滚只有在提交之前操作才有效)

    3. 提交事务:commit

  3. 特点:

    1. 原子性(automic):

      每步操作之间不可分

    2. 一致性(consistent):

      操作对象的最终总数不变

    3. 隔离性(isolation):

      事务和事务之间互不干扰。

      隔离性有4z种隔离级别:read uncommitted、read committed、repeatable read、serializable(4个级别越来越高,级别越高性能越差)

       查看MySQL数据库的隔离级别:select @@tx_isolation;
      
       修改MySQL数据库的隔离级别:set transaction isolation level 隔离级别【一次性】/set all transaction isolation level 隔离级别【永久性】;
      
      1. 脏读:

        当数据库的隔离级别为read uncommitted的时候就会引发脏读。

        解决方法:将数据库软件的隔离性给为read committed

      2. 不可重复读:

        当数据库的隔离级别为read committed的时候就会引发不可重复读。

        解决方法:将数据库软件的隔离性给为repeatable read

      3. 虚读(幻读):

        当数据库的隔离级别为repeatable read的时候就会引发不可重复读。

        解决方法:将数据库软件的隔离性给为serializable

    4. 持久性:

      数据一旦进入到数据库中,数据库需要保证数据的安全性。

4.3 数据库备份与还原

  1. 备份:

    1. 第三方软件sqlyog

      一般备份为sql文件,文件命名为“库名+_back”

    2. MySQL的命令

      mysqldump -u用户名 -p密码 数据库名 > D:\数据库名_back.sql【需要在cmd下执行,执行时不能连接数据库】【还原时需要手动创建库】

  2. 还原:

    1. MYSQL命令:

      source 备份文件数据库脚本【需要在cmd下执行,执行时需要先连接数据库】

4.4 MySQL数据库的编码

  1. 查看:

    show variables like “cha%”【%时通配符】

  2. 改变数据库编码:

    set 变量名 = 编码名;

4.5 查看sql语句的性能

  1. 语法:

    explain sql语句

  2. 提高性能方法:

    1. 给某一个字段建普通索引

      1. 语法:

        create index 索引名 on 表名(字段名)

      2. 删除:

        drop index 索引名 on 表名;

    2. 对表分区

    3. 使用缓存

五、 MD5加密

  1. 特点:

    1. 采取16进制

    2. 无论原密码多长,加密后变成32位(中间介质16个数)

六、 分层

  1. UI层(界面):

    包名:cn.java.ui

    此外还有个包存放实体:cn.java.entity

    UI层通过接口调用service层

  2. service接口层:

    包名:cn.java.service

  3. service层(业务层):

    包名:cn.java.service.impl

    service层通过接口调用dao层,即接口层

  4. dao接口层:

    包名:cn.java.dao

    只放接口

  5. dao层:

    包名:cn.java.dao.impl;

    此外还有个包存放工具:cn.java.utils

    dao层主要是操作数据库:增删改查,并且只能为实例方法,不能为静态方法

七、 框架BDUtils

  1. 核心类:

    QueryRunner

    使用时先创建QueryRunner对象

  2. 查询,则执行query方法:

    1. query(Connertion conn, String sql, ResultSetHandler rsh):

      第三个参数:表示返回什么类型:1)返回一个对象:new BeanHandler(对象类名.class); 2)返回一个对象的集合:new BeanListHandler(对象类名.class);

    2. query(Connertion conn, String sql, ResultSetHandler rsh,Object…params):

      第四个参数为sql中的参数,sql中参数用?代替。

  3. 增,执行insert方法:

    返回

  4. (增)删改,执行update方法:

发布了1 篇原创文章 · 获赞 0 · 访问量 18

猜你喜欢

转载自blog.csdn.net/Pytho_Hacker/article/details/104382086
今日推荐