zoukankan      html  css  js  c++  java
  • 19.04.17JavaWeb and SQL作业

    javaEE Design Patter(1)初步了解23种常用设计模式

    以下内容摘自CSDN:

    设计模式分为三大类:

    1. 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
    2. 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
    3. 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。

     23种常用设计模式:

    1. 工厂模式(Factory Pattern):在工厂模式中,客户类与工厂来是分开的,消费者任何时候需要产品只需要向工厂请求就好,消费者无需修改就可以接纳新产品。缺点是:当前产品修改是工厂也需要修改。
    2. 建造模式(Builder Pattern):将产品的内部表象和产品的生成过程分割开来,从而使一个建造过程生成具有不同表象的产品,建造模式使得产品内部表象可以独立的变化,客户不必知道产品的内部细节。建造模式可以强制实行一种分步骤的建造过程。
    3. 工厂方法模式(Abstract Factory Pattern):在工厂方法模式中,核心工厂类不再负责所有的产品的创建,而是将具体创建工作交给子类处理,成为一个抽象角色,仅负责给出具体工厂必须实现的接口,而不接触某款产品的实例化细节。
    4. 原型模型模式(Prototype Pattern):原型模型是通过给定一个原型对象来指明要创建的的对象类型,可以用复制这个对象的方法创建更多的对象,原型模型允许动态的增加或减少产品类。缺点是:每一个类必须配备一个克隆方法。
    5. 单例模式(Singleton Pattern):确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例单例模式。
    6. 适配器模式(Adapter Pattern):把我一个类的接口变化成客户端期望的另一个接口。
    7. 桥接模式(Bridge Pattern):将抽象化和实现化脱耦,使得二者可以独立变化,也就是说,将他们的强关联变成弱关联,即软件系统使用的是组合/聚合关系而不是继承关系,从而使两者可以独立变化。
    8. 合成模式(Composite Pattern):将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性
    9. 装饰者模式(Decorator Pattern):装饰者模式以客户端透明的方式扩展对象的功能,是继承方案的一个替代方案,提供了比继承更多的灵活性,动态的的给一个对象添加功能,这些功能又可以动态的撤销。可增加又一些基本功能排列组合产生非常强大的功能。
    10. 门面模式(Facade Pattern):外部与一个子系统通信必须通过一个门面对象进行,门面模式提供一个高层次的接口,使得子系统更容易使用。每一个子系统只有一个门面类,而且此门面类只有一个实例,单整个系统可以有多个门面类。
    11. 享元模式(Flyweight Pattern):使用共享对象可有效地支持大量的细粒度对象。
    12. 代理模式(Proxy pattern):给某一个对象创建一个代理对象,并由代理对象控制源对象的应用。
    13. 责任链模式(chain of responsinbleity Pattern):使多个对象有机会处理请求,从而避免了请求的发送者和接收者之间的耦合关系 。将这些对象连成一个链,并沿着这条链传递请求,知道有对象处理它为止
    14. 命令模式(cmd Pattern):将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
    15. 解释器模式(Interpreter Pattern):给定一门语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。
    16. 迭代子模式(Iterator Pattern):它提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。
    17. 调停者模式(mediator Pattern ):调停者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显作用。从而使他们可以松散偶合。当某些对象之间的作用发生改变时,不会立即影响其他的一些对象之间的作用。保证这些作用可以彼此独立的变化。调停者模式将多对多的相互作用转化为一对多的相互作用。调停者模式将对象的行为和协作抽象化,把对象在小尺度的行为上与其他对象的相互作用分开处理。
    18. 备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原来保存的状态。
    19. 观察者模式(Observer Pattern):定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新
    20. 状态模式(state Pattern ):当一个对象在状态改变时允许其改变行为,这个对象看起来像改变了其类。
    21. 策略模式(Strategy Pattern):定义一组算法,将每个算法都封装起来,并且使他们之间可以互换
    22. 模板方法模式(Template Method Pattern):
    23. 访问者模式(Visitor Pattern):封装一些作用于某种数据结构中的各种元素,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作

      以下内容摘自runoob:

      MySQL 数据类型

      MySQL中定义数据字段的类型对你数据库的优化是非常重要的。

      MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。


      数值类型

      MySQL支持所有标准SQL数值数据类型。

      这些类型包括严格数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

      关键字INT是INTEGER的同义词,关键字DEC是DECIMAL的同义词。

      BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

      作为SQL标准的扩展,MySQL也支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数类型的存储和范围。

      类型大小范围(有符号)范围(无符号)用途
      TINYINT 1 字节 (-128,127) (0,255) 小整数值
      SMALLINT 2 字节 (-32 768,32 767) (0,65 535) 大整数值
      MEDIUMINT 3 字节 (-8 388 608,8 388 607) (0,16 777 215) 大整数值
      INT或INTEGER 4 字节 (-2 147 483 648,2 147 483 647) (0,4 294 967 295) 大整数值
      BIGINT 8 字节 (-9,223,372,036,854,775,808,9 223 372 036 854 775 807) (0,18 446 744 073 709 551 615) 极大整数值
      FLOAT 4 字节 (-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38) 0,(1.175 494 351 E-38,3.402 823 466 E+38) 单精度
      浮点数值
      DOUBLE 8 字节 (-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308) 双精度
      浮点数值
      DECIMAL 对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2 依赖于M和D的值 依赖于M和D的值 小数值

      日期和时间类型

      表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME和YEAR。

      每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。

      TIMESTAMP类型有专有的自动更新特性,将在后面描述。

      类型大小
      (字节)
      范围格式用途
      DATE 3 1000-01-01/9999-12-31 YYYY-MM-DD 日期值
      TIME 3 '-838:59:59'/'838:59:59' HH:MM:SS 时间值或持续时间
      YEAR 1 1901/2155 YYYY 年份值
      DATETIME 8 1000-01-01 00:00:00/9999-12-31 23:59:59 YYYY-MM-DD HH:MM:SS 混合日期和时间值
      TIMESTAMP 4

      1970-01-01 00:00:00/2038

      结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07

      YYYYMMDD HHMMSS 混合日期和时间值,时间戳

      字符串类型

      字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。该节描述了这些类型如何工作以及如何在查询中使用这些类型。

      类型大小用途
      CHAR 0-255字节 定长字符串
      VARCHAR 0-65535 字节 变长字符串
      TINYBLOB 0-255字节 不超过 255 个字符的二进制字符串
      TINYTEXT 0-255字节 短文本字符串
      BLOB 0-65 535字节 二进制形式的长文本数据
      TEXT 0-65 535字节 长文本数据
      MEDIUMBLOB 0-16 777 215字节 二进制形式的中等长度文本数据
      MEDIUMTEXT 0-16 777 215字节 中等长度文本数据
      LONGBLOB 0-4 294 967 295字节 二进制形式的极大文本数据
      LONGTEXT 0-4 294 967 295字节 极大文本数据

      CHAR 和 VARCHAR 类型类似,但它们保存和检索的方式不同。它们的最大长度和是否尾部空格被保留等方面也不同。在存储或检索过程中不进行大小写转换。

      BINARY 和 VARBINARY 类似于 CHAR 和 VARCHAR,不同的是它们包含二进制字符串而不要非二进制字符串。也就是说,它们包含字节字符串而不是字符字符串。这说明它们没有字符集,并且排序和比较基于列值字节的数值值。

      BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。

      有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

      另:

      1.  

        MySQL 5.0 以上的版本:

        1、一个汉字占多少长度与编码有关:

        UTF-8:一个汉字=3个字节

        GBK:一个汉字=2个字节

        2、varchar(n) 表示 n 个字符,无论汉字和英文,Mysql 都能存入 n 个字符,仅是实际字节长度有所区别

      2.  

        1、整型

        MySQL数据类型 含义(有符号)
        tinyint(m) 1个字节  范围(-128~127)
        smallint(m) 2个字节  范围(-32768~32767)
        mediumint(m) 3个字节  范围(-8388608~8388607)
        int(m) 4个字节  范围(-2147483648~2147483647)
        bigint(m) 8个字节  范围(+-9.22*10的18次方)

        取值范围如果加了 unsigned,则最大值翻倍,如 tinyint unsigned 的取值范围为(0~255)。

        int(m) 里的 m 是表示 SELECT 查询结果集中的显示宽度,并不影响实际的取值范围,没有影响到显示的宽度,不知道这个 m 有什么用。

        2、浮点型(float 和 double)

        MySQL数据类型 含义
        float(m,d) 单精度浮点型    8位精度(4字节)     m总个数,d小数位
        double(m,d) 双精度浮点型    16位精度(8字节)    m总个数,d小数位

        设一个字段定义为 float(5,3),如果插入一个数 123.45678,实际数据库里存的是 123.457,但总个数还以实际为准,即 6 位。

        3、定点数

        浮点型在数据库中存放的是近似值,而定点类型在数据库中存放的是精确值。

        decimal(m,d) 参数 m<65 是总个数,d<30 且 d<m 是小数位。

        4、字符串(char,varchar,_text)

        MySQL数据类型 含义
        char(n) 固定长度,最多255个字符
        varchar(n) 可变长度,最多65535个字符
        tinytext 可变长度,最多255个字符
        text 可变长度,最多65535个字符
        mediumtext 可变长度,最多2的24次方-1个字符
        longtext 可变长度,最多2的32次方-1个字符

        char 和 varchar:

        •  1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以 char 类型存储的字符串末尾不能有空格,varchar 不限于此。
        •  2.char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节,varchar 是存入的实际字符数 +1 个字节(n<=255)或2个字节(n>255),所以 varchar(4),存入 3 个字符将占用 4 个字节。
        •  3.char 类型的字符串检索速度要比 varchar 类型的快。

        varchar 和 text:

        •  1.varchar 可指定 n,text 不能指定,内部存储 varchar 是存入的实际字符数 +1 个字节(n<=255)或 2 个字节(n>255),text 是实际字符数 +2 个字节。
        •  2.text 类型不能有默认值。
        •  3.varchar 可直接创建索引,text 创建索引要指定前多少个字符。varchar 查询速度快于 text, 在都创建索引的情况下,text 的索引似乎不起作用。

        5.二进制数据(_Blob)

        •  1._BLOB和_text存储方式不同,_TEXT以文本方式存储,英文存储区分大小写,而_Blob是以二进制方式存储,不分大小写。
        •  2._BLOB存储的数据只能整体读出。
        •  3._TEXT可以指定字符集,_BLO不用指定字符集。

        6.日期时间类型

        MySQL数据类型 含义
        date 日期 '2008-12-2'
        time 时间 '12:25:36'
        datetime 日期时间 '2008-12-2 22:06:44'
        timestamp 自动存储记录修改时间

        若定义一个字段为timestamp,这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

        数据类型的属性

        MySQL关键字 含义
        NULL 数据列可包含NULL值
        NOT NULL 数据列不允许包含NULL值
        DEFAULT 默认值
        PRIMARY KEY 主键
        AUTO_INCREMENT 自动递增,适用于整数类型
        UNSIGNED 无符号
        CHARACTER SET name 指定一个字符集

        以下内容摘自csdn

        一、备份常用操作基本命令

        1、备份命令mysqldump格式

           格式:mysqldump -h主机名  -P端口 -u用户名 -p密码 –database 数据库名 > 文件名.sql 

        2、备份MySQL数据库为带删除表的格式

        备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

        mysqldump  --add-drop-table -uusername -ppassword -database databasename > backupfile.sql

        3、直接将MySQL数据库压缩备份

        mysqldump -hhostname -uusername -ppassword -database databasename | gzip > backupfile.sql.gz

        4、备份MySQL数据库某个(些)表

        mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql

        5、同时备份多个MySQL数据库

        mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql仅仅备6、仅备份份数据库结构

        mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql

        7、备份服务器上所有数据库

        mysqldump –all-databases > allbackupfile.sql

        8、还原MySQL数据库的命令

        mysql -hhostname -uusername -ppassword databasename < backupfile.sql

        9、还原压缩的MySQL数据库

        gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

        10、将数据库转移到新服务器

        mysqldump -uusername -ppassword databasename | mysql –host=*.*.*.* -C databasename

        11、--master-data 和--single-transaction

           在mysqldump中使用--master-data=2,会记录binlog文件和position的信息 。--single-transaction会将隔离级别设置成repeatable-commited

        12、导入数据库

        常用source命令,用use进入到某个数据库,mysql>source d: est.sql,后面的参数为脚本文件。

        13、查看binlog日志

        查看binlog日志可用用命令 mysqlbinlog  binlog日志名称|more

         

        14、general_log

        General_log记录数据库的任何操作,查看general_log 的状态和位置可以用命令show variables like "general_log%"  ,开启general_log可以用命令set global general_log=on

        二、增量备份

        小量的数据库可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,就不太可能每天进行一次完整备份了,这时候就可以使用增量备份。增量备份的原理就是使用了mysql的binlog志。

         

        1、首先做一次完整备份:

        mysqldump -h10.6.208.183 -utest2 -p123  -P3310 --single-transaction  --master-data=2  test>test.sql这时候就会得到一个全备文件test.sql

        在sql文件中我们会看到:
        -- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;是指备份后所有的更改将会保存到bin-log.000002二进制文件中。
        2、在test库的t_student表中增加两条记录,然后执行flush logs命令。这时将会产生一个新的二进制日志文件bin-log.000003,bin-log.000002则保存了全备过后的所有更改,既增加记录的操作也保存在了bin-log.00002中。

        3、再在test库中的a表中增加两条记录,然后误删除t_student表和a表。a中增加记录的操作和删除表a和t_student的操作都记录在bin-log.000003中。

         

        三、恢复

        1、首先导入全备数据

        mysql -h10.6.208.183 -utest2 -p123  -P3310 < test.sql,也可以直接在mysql命令行下面用source导入

        2、恢复bin-log.000002

           mysqlbinlog bin-log.000002 |mysql -h10.6.208.183 -utest2 -p123  -P3310  

        3、恢复部分 bin-log.000003

           在general_log中找到误删除的时间点,然后更加对应的时间点到bin-log.000003中找到相应的position点,需要恢复到误删除的前面一个position点。

        可以用如下参数来控制binlog的区间

        --start-position 开始点 --stop-position 结束点

        --start-date 开始时间  --stop-date  结束时间

        找到恢复点后,既可以开始恢复。

        mysql-connector/python使用示例

        1.下载安装connector/python

        地址:https://dev.mysql.com/downloads/connector/python/

        下载的版本(mysql-connector-python-8.0.15-py3.5-windows-x86-64bit.msi)  下载后根据提示安装

         

        2.数据库中数据

         

        3.使用python中的mysql.connector模块操作mysql

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        25
        26
        import mysql.connector                
         
        # mysql1.py
        config = {
            'host''127.0.0.1',
            'user''root',
            'password''root',
            'port'3306,
            'database''test',
            'charset''utf8'
        }
        try:
            cnn = mysql.connector.connect(**config)
        except mysql.connector.Error as e:
            print('connect fails!{}'.format(e))
        cursor = cnn.cursor()
        try:
            sql_query = 'select name,age from stu ;'
            cursor.execute(sql_query)
            for name, age in cursor:
                print (name, age)
        except mysql.connector.Error as e:
            print('query error!{}'.format(e))
        finally:
            cursor.close()
            cnn.close()

        结果:

        1
        2
        3
        4
        5
        6
        (u'xiaoming'10)
        (u'rose'18)
        (u'jack'19)
        (u'fang'20)
        (u'Liang'40)
        (u'Age'None)
  • 相关阅读:
    Thinking in Java Reading Note(9.接口)
    Thinking in java Reading Note(8.多态)
    Thinking in Java Reading Note(7.复用类)
    SQL必知必会
    Thinking in Java Reading Note(5.初始化与清理)
    Thinking in Java Reading Note(2.一切都是对象)
    鸟哥的Linux私房菜笔记(1.基础)
    Thinking in Java Reading Note(1.对象导论)
    CoreJava2 Reading Note(2:I/O)
    CoreJava2 Reading Note(1:Stream)
  • 原文地址:https://www.cnblogs.com/avopen/p/10833183.html
Copyright © 2011-2022 走看看