Java学习二十一

今天的内容为数据库表的约束和实例练习。

一、约束

  概念:顾名思义,约束便是对表中的数据进行限定,以此来保证数据的正确性、有效性和完整性。我们平常百度到的信息均进行了约束。

  约束分为四大类:1、非空约束(not null);2、唯一约束(unique);3、主键约束(primary key);4、外键约束(foreign key)。

  1、非空约束:数据不能为空

    (1)创建表时添加非空约束:create table stu(id int,name varchar(20) not null);

    (2)创建完表后添加非空约束:alter table stu modify name varchar(20) not null; 相当于一个修改

    (3)解除非空约束:alter table stu modify name varchar(20);

  2、唯一约束:限制数据的唯一性

    (1)语法:create table stu(id int,phone varchar(20) unique);

    (2)创建完表后添加唯一约束:alter table stu modify phone;

    (3)解除唯一约束:alter table stu drop index phone;

    注:唯一约束可以存在null,但只能有一条。

  3、主键约束:非空且唯一,相当于非空和唯一的合并,一张表只能有一个字段为主键;主键是表中记录的唯一标识。

    (1)添加主键约束:create table stu(id int primary key,name varchar(20));

    (2)创建表后添加主键:alter table stu modify id int primary key;

    (3)解除主键:alter table stu drop primary key;

    (4)自动增长:如果某一列是数值类型,使用auto_increment来完成自动增长

      ①创建自动增长:create table stu(id int primary key auto_increment,name varchar(20));

      ②创建表之后添加自动增长:alter table stu modify id int auto_increment;

  4、外键约束:多张表操作,表与表之间产生联系,保证数据的正确性。

    (1)创建表时添加外键:create table 表名(...外键列 constraint 外键名 foreign key(外键列名) references 主表名(主表列名));

    (2)创建表后添加外键:alter table 表名 add constraint 外键名 foreign key (外键字段名)references 主表名(主表列名);

    (3)删除外键:alter table 表名 drop foreign key 外键名:

    (4)级联操作

      ①添加级联操作:alter table 表名 add constraint 外键名 foreign key (外键字段名)references主表名(主表列名)on update cascade on delete cascade;

      ②分类:1)更新:on update cascade;

          2)删除:on delete cascade;

二、实例练习,代码中有所用方法的注释

1、

package Java时间处理;

import java.text.SimpleDateFormat;
import java.util.Date;


/*
格式化时间(SimpleDateFormat)
使用 SimpleDateFormat 类的 format(date) 方法来格式化时间
会返回系统时间
 */
public class _1timeFormat {
    public static void main(String[] args) {
        Date d=new Date();
        String str="yyyy-MM-dd HH:mm:ss";//年月日,时分秒
        SimpleDateFormat s=new SimpleDateFormat(str);//设置格式
        System.out.println(s.format(d));
    }
}

2、

package Java时间处理;

import java.text.SimpleDateFormat;
import java.util.Date;

/*
获取当前时间
使用 Date 类及 SimpleDateFormat 类的 format(date) 方法来输出当前时间
 */
public class _2time {
    public static void main(String[] args) {
        SimpleDateFormat s=new SimpleDateFormat();//格式化时间
        s.applyPattern("yyyy-MM-dd HH:mm:ss");//a 为am/pm标记
        Date data=new Date();//获取当前时间
        System.out.println("当前时间"+s.format(data));
    }
}

3、

package Java时间处理;

import java.util.Calendar;

/*
获取年份、月份等
使用 Calendar 类来输出年份、月份等
 */
public class _3getCalendar {
    public static void main(String[] args) {
        Calendar cal=Calendar.getInstance();
        int day = cal.get(Calendar.DATE);
        int month = cal.get(Calendar.MONTH) + 1;
        int year = cal.get(Calendar.YEAR);
        int dow = cal.get(Calendar.DAY_OF_WEEK);//一周的第几天
        int dom = cal.get(Calendar.DAY_OF_MONTH);//一月的第几天
        int doy = cal.get(Calendar.DAY_OF_YEAR);//一年的第几天

        System.out.println("当期时间: " + cal.getTime());
        System.out.println("日期: " + day);
        System.out.println("月份: " + month);
        System.out.println("年份: " + year);
        System.out.println("一周的第几天: " + dow);  // 星期日为一周的第一天输出为 1,星期一输出为 2,以此类推
        System.out.println("一月中的第几天: " + dom);
        System.out.println("一年的第几天: " + doy);
    }
    /*
    Calendar.getInstance()不仅能获取当前的时间,还能指定需要获取的时间点
     */
}

4、

package Java时间处理;

import java.awt.dnd.DropTarget;
import java.text.SimpleDateFormat;
import java.util.Date;

/*
时间戳转换成时间
使用 SimpleDateFormat 类的 format() 方法将时间戳转换成时间
 */
public class _4timechange {
    public static void main(String[] args) {
        long timeStamp=System.currentTimeMillis();//获取当前时间戳
        SimpleDateFormat s=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String sd=s.format(new Date(Long.parseLong(String.valueOf(timeStamp))));
        System.out.println("格式化结果:"+sd);

        SimpleDateFormat s2=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String sd2=s2.format(new Date(Long.parseLong(String.valueOf(timeStamp))));
        System.out.println("格式化结果:"+sd2);
    }
}
/*
(1)String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
(2)String.valueOf(char c) : 将 char 变量 c 转换成字符串
(3)String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
(4)String.valueOf(char[] data, int offset, int count) : 将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串

(5)String.valueOf(double d) : 将 double 变量 d 转换成字符串
(6)String.valueOf(float f) : 将 float 变量 f 转换成字符串
(7)String.valueOf(int i) : 将 int 变量 i 转换成字符串
(8)String.valueOf(long l) : 将 long 变量 l 转换成字符串
(9)String.valueOf(Object obj) : 将 obj 对象转换成 字符串, 等于 obj.toString()

    parseLong()是将字符串转化为数字的方法

    yyyy:年
MM:月
dd:日
hh:1~12小时制(1-12)
HH:24小时制(0-23)
mm:分
ss:秒
S:毫秒
E:星期几
D:一年中的第几天
F:一月中的第几个星期(会把这个月总共过的天数除以7)
w:一年中的第几个星期
W:一月中的第几星期(会根据实际情况来算)
a:上下午标识
k:和HH差不多,表示一天24小时制(1-24)
K:和hh差不多,表示一天12小时制(0-11)
z:表示时区
 */

5、

package Java方法;
/*
方法重载
如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。 具体说明如下:

方法名相同
方法的参数类型,参数个不一样
方法的返回类型可以不相同
方法的修饰符可以不相同
main 方法也可以被重载
 */
public class _1methodOverloading {
    public static void main(String[] args) {
        myclass t=new myclass();
        t.info();
        t.info("重载方法");
        //重载构造函数
        new myclass();
    }
}

class myclass{//myclass类
    int height;
    myclass(){
        System.out.println("无参构造函数");
        height=4;
    }
    myclass(int i){
        System.out.println("带参构造函数");
        height=i;
        System.out.println("房子高度:"+i+"米");
    }

    void info(){
        System.out.println("房子高度:"+height+"米");

    }
    void info(String s){
        System.out.println(s+":房子高度"+height+"米");
    }
}

6、

package Java方法;
/*
输出数组元素
通过重载 MainClass 类的 printArray 方法输出不同类型(整型, 双精度及字符型)的数组
 */
public class _2arrayoutput {
    public static void main(String[] args) {
        Integer[] i={1,2,3,4,5,6};
        Double[] d={1.1,2.2,3.2,4.5,5.6,7.8};
        Character[] c={'h','c','u','e','o'};
        System.out.println("输出整型数组");
        printArray(i);
        System.out.println("输出双精度数组");
        printArray(d);
        System.out.println("输出字符型数组");
        printArray(c);
    }

    public static void printArray(Integer[] input){//包装类
        for(Integer element:input){
            System.out.printf("%s",element);
            System.out.println();
        }
    }


    public static void printArray(Double[] inputArray){
        for(Double element:inputArray){
            System.out.printf("%s",element);
            System.out.println();
        }
    }
    public static void printArray(Character[] input){
        for(Character element:input){
            System.out.printf("%s",element);
            System.out.println();
        }
    }
}

7、

package Java方法;
/*
汉诺塔算法
1.有三根杆子A,B,C。A杆上有若干碟子
2.每次移动一块碟子,小的只能叠在大的上面
3.把所有碟子从A杆全部移到C杆上
 */
public class _3HNT {
    public static void main(String[] args) {
        int nDisks = 3;
        doTowers(nDisks, 'A', 'B', 'C');
    }

    public static void doTowers(int topN,char from,char inter,char to){
        if(topN==1){
            System.out.println("Disk 1 from"+from+"to"+to);
        }else{
            doTowers(topN-1,from,to,inter);
            System.out.println("Disk "
                    + topN + " from " + from + " to " + to);
            doTowers(topN - 1, inter, from, to);
        }
    }
}

8、

package Java方法;
/*
斐波那契数列
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368……

特别指出:第0项是0,第1项是第一个1。

这个数列从第三项开始,每一项都等于前两项之和
 */
public class _4mainclass {
    public static void main(String[] args) {
        for(int count=0;count<10;count++){
            System.out.println("斐波那契数列第"+(count+1)+"位是:"+fibonacci(count));
        }
    }

    public static long fibonacci(long number){
        if(number==0||number==1){
            return number;
        }else{
            return fibonacci(number-1)+fibonacci(number-2);
        }
    }
}

9、

package Java方法;
/*
阶乘
一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!。

亦即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n
 */
public class _5Factorial {
    public static void main(String[] args) {
        for(int i=0;i<10;i++){
            System.out.println(i+"!="+factorial(i));
        }
    }

    public static long factorial(long num){
        if(num<=1){
            return 1;
        }else{
            return factorial(num-1)*num;
        }
    }
}

10、

package Java方法;
/*
方法覆盖
方法重载(Overloading):如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
方法覆盖(Overriding):如果在子类中定义一个方法,其名称、返回类型及参数签名正好与父类中某个方法的名称、返回类型及参数签名相匹配,那么可以说,子类的方法覆盖了父类的方法。
 */
public class _6Cover {
    public static void main(String[] args) {
        Figure f=new Figure(10,10);
        Rectangle r=new Rectangle(10,10);
        Figure f1;
        f1=f;
        System.out.println(f1.area());
        f1=f;
        System.out.println(f1.area());
    }

    //定义父类
    static class Figure{
        double d1;
        double d2;
        Figure(double a,double b){
            d1=a;
            d2=b;
        }
        Double area(){
            System.out.println("Inside area for figure.");
            return d1*d2;
        }
    }

    //定义子类
    static class Rectangle extends Figure{
        Rectangle(double a,double b){
            super(a,b);
        }
        Double area(){
            System.out.println("Inside area for rectangle.");
            return d1*d2;
        }
    }
}

11、

package Java方法;

import java.util.ArrayList;
import java.util.Vector;

/*
instanceof 关键字用法
instanceof 是 Java 的一个二元操作符,类似于 ==,>,< 等操作符。

instanceof 是 Java 的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回 boolean 的数据类型。
 */
public class _7Instanceof {
    public static void main(String[] args) {
        Object testObject = new ArrayList();
        displayObjectClass(testObject);
    }

    public static void displayObjectClass(Object o) {
        if (o instanceof Vector)
            System.out.println("对象是 java.util.Vector 类的实例");
        else if (o instanceof ArrayList)
            System.out.println("对象是 java.util.ArrayList 类的实例");
        else
            System.out.println("对象是 " + o.getClass() + " 类的实例");
    }
}

12、

package Java方法;
/*
break 关键字用法
Java break 语句可以直接强行退出当前的循环,忽略循环体中任何其他语句和循环条件测试。
 */
public class _8Break {
    public static void main(String[] args) {
        int[] intary = { 99,12,22,34,45,67,5678,8990 };
        int no = 5678;
        int i = 0;
        boolean flag=false;
        for(;i<intary.length;i++){
            if(intary[i]==no){
                flag=true;
                break;
            }
        }
        if(flag){
            System.out.println(no+"索引位置在"+i+"处");
        }else{
            System.out.println("元素不在数组中");
        }
    }
}

13、

package Java方法;
/*
continue 关键字用法
Java continue 语句语句用来结束当前循环,并进入下一次循环,即仅仅这一次循环结束了,不是所有循环结束了,后边的循环依旧进行
 */
public class _9continue {
    public static void main(String[] args) {
        StringBuffer s=new StringBuffer("hello,how are you?");
        int length=s.length();
        int count=0;
        for(int i=0;i<length;i++){
            if(s.charAt(i)!='h')
                continue;
            count++;
            s.setCharAt(i,'h');
        }
        System.out.println("发现 " + count
                + " 个 h 字符");
        System.out.println(s);
    }
}

 

 

      

 

posted on 2021-10-12 22:42  跨越&尘世  阅读(58)  评论(0编辑  收藏  举报