• Document


    回顾:
    sql
        sql分类:
            DDL:
                对象:数据库和表
                关键词:create alter drop truncate
                创建数据库:create database day06;
                删除数据库: drop database day06;
                创建表:create table user(
                    id int primark key  auto_increment,
                    username varchar(20)
                );
                
                修改表:
                    alter table user rename to user10;
                    alter table user add password varchar(20);
                    alter table user change password pwd varchar(20);
                    alter table user modify pwd int;
                    alter table user drop pwd;
                
                删除表:
                    drop table user;
                    
                常用的命令:
                    use day06;
                    show tables;
                    desc user;
                    show create table user;
                
            DML:
                对象:记录(行)
                关键词:insert update delete
                插入:
                    insert into user values(字段值1,字段值2,...);-- 所有的字段
                    insert into user(字段1,字段2....) values(字段值1,字段值2);-- 插入指定的字段
                更新:
                    update user set 字段=字段值1,字段2=字段值2 where 条件;
                删除:
                    delete from user where 条件;
                扩展:
                    以后开发中很少使用delete,数据无价,删除有物理和逻辑(常用),
                        逻辑删除一般会在表中添加一个字段(isdel:若值为1,代表删除了;若为0代表没有删除),
                        此时的删除操作变成了更新操作.
            DQL:
                select ... from 表名 where 条件 group by 分组字段 having 条件 order by 排序字段;
                执行顺序:
                 1.确定数据来自那张表  from
                 2.是否需要筛选  where 
                 3.是否需要分组 group by
                 4.分组后是否需要筛选 having
                 5.是否需要排序 order by
                 6.确定显示那些数据. select
            DCL:用户 权限 事务
    ////////////////////////
    auto_increment 自增
    truncate 干掉表,重新创建 和delete的区别
    数据类型:
        int 和 varchar(size):可变长度
        date time  datetime timestamp
    ////////////////////////////////////
    多表的操作:
        表与表之间的关系:
            一对多:
                在多表的一方添加一个外键,外键的名称一般是主表名称_id,外键的类型和主表的主键的类型保持一致
                为了保证数据的有效性和完整性,
                    需要在多表上添加外键约束
                        格式:
                            alter table 多表 add [constraint [外键的名称]] foreign key(外键名称) references 主表名称(主键);
            多对多:
                添加一张中间表,存放两张表的主键,就可以将多对多拆分成两个一对多了
                为了保证数据的有效性和完整性,
                    需要在中间表添加两个外键约束
            一对一:(了解)
                1.两个实体合二为一(字段比较少)
                2.将一张表的主键添加外键约束即可
    /////////////////////////////
    多表的查询:
        内连接:
            显式:
                select a.*,b.* from a join b on 条件;
            隐式:
                select a.*,b.* from a,b where 条件;
        外连接:
            左外连接:
                select a.*,b.* from a left join b on 条件;
                以a为主,展示所有数据,根据条件关联查询b表,满足条件则展示,不满足的话以null显示
        子查询::
            一个查询依赖于另一个查询.
    //////////////////////////////////////
    案例1-通过jdbc完成单表的curd操作:
    需求:
        对分类表完成操作.
    技术分析:
        jdbc
    ///////////////////////
    jdbc:
        java操作数据库.jdbc是oracle公司指定的一套规范(一套接口)
        驱动:jdbc的实现类.由数据库厂商提供.
        我们就可以通过一套规范操作不同的数据库了(多态)
        jdbc作用:
            连接数据库
            发送sql语句
            处理结果
        
    jdbc操作步骤:★
        1.数据库和表
        2.创建一个项目
        3.导入驱动jar包
        4.编码:
            注册驱动
            获取连接
            编写sql
            创建预编译的语句执行者
            设置参数
            执行sql
            处理结果
            释放资源
    
        初始化数据库和表:
            CREATE DATABASE day07;
            USE day07;    
            
            create table category(
                cid varchar(20) primary key,
                cname varchar(20)
            );
            
            insert into category values('c001','电器');
            insert into category values('c002','服饰');
            insert into category values('c003','化妆品');
            insert into category values('c004','书籍');
        
        IDE打开之后
            1.修改字符集 utf-8
            2.新建 java项目
            3.使用的jdk为自己的jdk 不用使用内置
        
        使用junit单元测试
            要求:
                1.方法是public void xxx(){}
                2.在方法上添加 @Test
                3.在@Test 按下 ctrl+1(快速锁定错误)
                4.在方法上右键 run as  -->junit 就可以执行方法了.
    jdbc-api详解:
        所有的包 都是 java.sql 或者 javax.sql
        
        DriverManager:管理了一组jdbc的操作 类
            常用方法:
                了解:注册驱动    
                    static void registerDriver(Driver driver) :
                        通过查看 com.mysql.jdbc.Driver的源码 有如下代码
                             static {
                                try {
                                    java.sql.DriverManager.registerDriver(new Driver());//这段代码我们已经写过
                                } catch (SQLException E) {
                                    throw new RuntimeException("Can't register driver!");
                                }
                            }
                        驱动注册了两次.我们只需要将静态代码块执行一次,类被加载到内存中会执行静态代码块,并且只执行一次.
                        现在只需要将类加载到内存中即可:
                            方式1:
                                ★Class.forName("全限定名");//包名+类名   com.mysql.jdbc.Driver
                            方式2:
                                类名.class;
                            方式3:
                                对象.getClass();
     
                掌握:获取连接
                    static Connection getConnection(String url, String user, String password) 
                        参数1:告诉我们连接什么类型的数据库及连接那个数据库
                                    协议:数据库类型:子协议 参数
                            mysql:    jdbc:mysql://localhost:3306/数据库名称
                            oracle:    jdbc:oracle:thin@localhost:1521@实例
                            
                        参数2:账户名 root
                        参数3:密码
        
        
        (了解)Driver:java.sql 接口 驱动
        Connection:连接 接口
            常用方法:
                获取语句执行者:
                    (了解)Statement createStatement() :获取普通的语句执行者  会出现sql注入问题
                    ★PreparedStatement prepareStatement(String sql) :获取预编译语句执行者
                    (了解)CallableStatement prepareCall(String sql):获取调用存储过程的语句执行者
    
                了解:
                    setAutoCommit(false) :手动开启事务
                    commit():提交事务
                    rollback():事务回滚
        
        Statement:语句执行者 接口
        PreparedStatement:预编译语句执行者 接口
            常用方法:
                设置参数:
                    setXxx(int 第几个问号,Object 实际参数);
                        常见的方法:
                             setInt
                             setString
                             setObject
                
                执行sql:
                     ResultSet executeQuery() :执行 r 语句 返回值:结果集
                     int executeUpdate() :执行cud 语句 返回值:影响的行数
     
        
        ResultSet:结果集 接口
            执行查询语句之后返回的结果
                常用方法:
                    boolean next():判断是否有下一条记录,若有返回true且将光标移到下一行,若没有呢则返回false
                        光标一开始处于第一条记录的上面
                    
                    获取具体内容
                        getXxx(int|string)
                            若参数为int :第几列
                            若参数为string:列名(字段名)
                        例如:
                            获取cname的内容可以通过
                                getString(2)
                                getString("cname")
                        常用方法:
                            getInt
                            getString 也可以获取int值
                            getObject 可以获取任意
    ///////////////////////
    常见的配置文件格式:
        1.properties
            里面内容的格式 key=value
        2.xml
    /////////////////
    若我们的配置文件为properties,并且放在src目录下.
    我们可以通过 ResourceBundle工具快速获取里面的配置信息
        使用步骤:
            1.获取ResourceBundle 对象:
                static ResourceBundle getBundle("文件名称不带后缀名") 
            2.通过ResourceBundle 对象获取配置信息 
                String getString(String key) :通过执行key获取指定的value
    //////////////////////
    案例2-通过连接池(数据源)优化我们的操作.
    需求:
        使用jdbc的时候,没操作一次都需要获取连接(创建)用完之后把连接释放掉了(销毁),通过连接池来优化curd操作.
    技术分析:
        连接池
    ////////////////////
    连接池概述:
        管理数据库的连接,
        作用:
            提高项目的性能.
        就是在连接池初始化的时候存入一定数量的连接,用的时候通过方法获取,不用的时候归还连接即可.
        所有的连接池必须实现一个接口 javax.sql.DataSource接口
        
        获取连接方法:
            Connection getConnection() 
        归还连接的方法就是以前的释放资源的方法.调用connection.close();
    自定义一个连接池(理解思想)
        
    常用连接池:
        DBCP
        C3P0
    ///////////////////
    增前方法
        1.继承
        2.装饰者模式(静态代理)
        3.动态代理
    //////////////
    装饰者模式:★★★
        使用步骤:
            1.装饰者和被装饰者实现同一个接口或者继承同一个类
            2.装饰者中要有被装饰者的引用
            3.对需要增强的方法进行加强
            4.对不需要加强的方法调用原来方法
     ////////////////////////////////////
     常用的连接池:
        DBCP:(理解)
            apache组织
            使用步骤:
                1.导入jar包(commons-dbcp-1.4.jar和commons-pool-1.5.6.jar)
                2.使用api
                    a.硬编码
                        //创建连接池
                        BasicDataSource ds = new BasicDataSource();
                        
                        //配置信息
                        ds.setDriverClassName("com.mysql.jdbc.Driver");
                        ds.setUrl("jdbc:mysql:///day07");
                        ds.setUsername("root");
                        ds.setPassword("1234");
                    b.配置文件
                        实现编写一个properties文件
                        //存放配置文件
                        Properties prop = new Properties();
                        prop.load(new FileInputStream("src/dbcp.properties"));
                        //设置
                        //prop.setProperty("driverClassName", "com.mysql.jdbc.Driver");
                        
                        //创建连接池
                        DataSource ds = new BasicDataSourceFactory().createDataSource(prop);
        C3P0:(★)
            hibernate和spring使用
            有自动回收空闲连接的功能.
            使用步骤:
                1.导入jar包(c3p0-0.9.1.2.jar)
                2.使用api
                    a.硬编码(不推荐)
                        new ComboPooledDataSource()
                    b.配置文件
                        配置文件的名称:c3p0.properties 或者 c3p0-config.xml
                        配置文件的路径:src下
                    
                        编码只需要一句话
                            new ComboPooledDataSource()//使用默认的配置
                            new ComboPooledDataSource(String configName)//使用命名的配置 若配置的名字找不到,使用默认的配置
                            
    ////////////////////////////
    案例3-使用dbutils完成curd操作
    技术分析:
        dbutils
    dbutils:
        是apache组织的一个工具类,jdbc的框架,更方便我们使用
        使用步骤:
            1.导入jar包(commons-dbutils-1.4.jar)
            2.创建一个queryrunner类
                queryrunner作用:操作sql语句
                    构造方法:
                        new QueryRunner(Datasource ds);
            3.编写sql
            4.执行sql
                query(..):执行r操作
                update(...):执行cud操作
    ////////////////////////////
    核心类或接口
        QueryRunner:类名
            作用:操作sql语句
            构造器:
                new QueryRunner(Datasource ds);
            注意:
                底层帮我们创建连接,创建语句执行者 ,释放资源.
            常用方法:
                query(..):
                update(..):
        
        DbUtils:释放资源,控制事务 类
            closeQuietly(conn):内部处理了异常
            commitAndClose(Connection conn):提交事务并释放连接
            ....
        
        ResultSetHandler:封装结果集 接口
            
             ArrayHandler, ArrayListHandler, BeanHandler, BeanListHandler, ColumnListHandler, KeyedHandler, MapHandler, MapListHandler, ScalarHandler
             
             (了解)ArrayHandler, 将查询结果的第一条记录封装成数组,返回
             (了解)ArrayListHandler, 将查询结果的每一条记录封装成数组,将每一个数组放入list中返回
             ★★BeanHandler, 将查询结果的第一条记录封装成指定的bean对象,返回
             ★★BeanListHandler, 将查询结果的每一条记录封装成指定的bean对象,将每一个bean对象放入list中 返回.
             (了解)ColumnListHandler, 将查询结果的指定一列放入list中返回 
             (了解)MapHandler, 将查询结果的第一条记录封装成map,字段名作为key,值为value 返回
             ★MapListHandler, 将查询结果的每一条记录封装map集合,将每一个map集合放入list中返回
             ★ScalarHandler,针对于聚合函数 例如:count(*) 返回的是一个Long值
            
            
            
            
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
        
    //////////////////////////////////
    上午回顾:
    jdbc:
        java语言操作数据库
        jdbc是oracle公司指定的一套规范,
        驱动:jdbc的实现类,由数据库厂商提供.
    jdbc操作步骤:
        1.导入驱动jar包
        2.注册驱动
        3.获取连接
        4.编写sql
        5.获取语句执行者
            PreparedStatement st=conn.prepareStatement(sql);
        6.设置参数
            st.setXxx(int 第几个问号,Object 实参);
        7.执行sql
            ResultSet rs=st.executeQuery();
            int i=st.executeUpdate();
        8.处理结果
            若是resultset
                while(rs.next()){
                    rs.getXxx(int|String)
                }
        9.释放资源
    ////////////////////////////////////////
    获取src目录下的properties格式的配置文件
        ResourceBundle bundle=ResourceBundle.getBundle("不带后缀名的文件名");
        String value = bundle.getString("key"); 
    ////////////////////////
    自定义连接池:
    增强方法:
        1.继承
        2.装饰者模式(静态代理)
        3.动态代理
    ///////////////
    装饰者模式(静态代理)
        1.装饰者和被装饰者实现同一个接口或者继承同一个类
        2.在装饰者中要有被装饰者的引用
        3.对需要增强的方法进行加强
        4.对不需要加强的方法调用原来方法
    ///////////////////
    常见连接池:
        dbcp:
        c3p0:★
            配置文件:
                名称:c3p0.properties或者 c3p0-config.xml
                位置:src下
            使用:
                new ComboPooledDataSource()
    ////////////////
    dbutils:
        工具类,封装了jdbc的操作.
        使用步骤:
            1.导入jar包
            2.创建queryrunner类
            3.编写sql
            4.执行sql
    queryrunner:操作sql语句
        构造器:
            new queryrunner()
        方法:
            query(..)
            update(..)
    ResultSetHandler:封装结果集
        BeanHandler
        BeanListHandler
        MapListHandler
        ScalarHandler
        
        
        
        
        
        
        
        
        
        
        
        
        
  • 相关阅读:
    使用 libevent 和 libev 提高网络应用性能
    An existing connection was forcibly closed by the remote host
    各种浏览器的兼容css
    vs输出窗口,显示build的时间
    sass
    网站设置404错误页
    List of content management systems
    css footer not displaying at the bottom of the page
    强制刷新css
    sp_executesql invalid object name
  • 原文地址:https://www.cnblogs.com/chenyanlong/p/9955302.html
Copyright © 2020-2023  润新知