配置数据库连接及数据库操作

主外键说明:
  主键:是表中一行的一个唯一标识,通过主键我们可以快速的查询一条数据!
  主键特性:唯一(unique),not null,可以被引用!

表的关联:
  1.一对一
    CREATE TABLE `husband` (
    `id` INT(11) PRIMARY KEY AUTO_INCREMENT,
    `hname` VARCHAR(50)
    )

    DROP TABLE wife; 
    SELECT * FROM wife

    CREATE TABLE `wife` (
    `id` INT(11) PRIMARY KEY,
    `wname` VARCHAR(50),
    FOREIGN KEY(id) REFERENCES husband(id)
    )

    INSERT INTO husband VALUES(NULL,"武大郎");
    INSERT INTO wife VALUES(1,"潘金莲")

    SELECT * FROM husband;
    SELECT * FROM wife;


    INSERT INTO wife VALUES(2,"xi");


  2.一对多
    经典案例:部门和员工的关系:一个部门有多个员工,但是一个员工只能在一个部门中
    对于一对多的关系表:我们通常是在多的一端维护一个外键,这个外键指向一的主键


    CREATE TABLE dept(
    dept_id INT PRIMARY KEY AUTO_INCREMENT,
    dept_name VARCHAR(50)
    )

    CREATE TABLE employee(
    id INT PRIMARY KEY AUTO_INCREMENT,
    NAME VARCHAR(50),
    dept_id INT,
    FOREIGN KEY(dept_id) REFERENCES dept(dept_id)
    )

    SHOW TABLES;

    INSERT INTO dept VALUES(NULL,"后勤部")

    SELECT * FROM dept;

    INSERT INTO employee VALUES(NULL,"郭富城",4)

    SELECT * FROM employee

    DELETE FROM employee WHERE id = 4;

  3.多对多
    经典案例:老师和学生,选课

    单表查询:
      SELECT SUM(score),id
      FROM stu 
      WHERE id > 2
      GROUP BY snum
      HAVING SUM(score) > 90
      ORDER BY id ASC
      LIMIT 1,2;

    多表查询

      纵向连接(union ,union all)
        select name from stu1
        UNION all
        select name from stu2
      注意:union会对数据进行过滤,保证数据唯一,而union all不会对数据进行

      横向连接
        join on来完成横向连接
        inner join :只会显示满足条件的数据
        select * from ( person p) inner join (orders o) on p.id = o.oid

           1)左向外联接:LEFT  JOIN或LEFT OUTER JOIN     
      左向外联接的结果集包括  LEFT OUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

       select   a.*,b.*   from   a   left   join   b     on   a.id=b.parent_id  

          2)右向外联接:RIGHT  JOIN 或 RIGHT  OUTER  JOIN     
      右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

       select   a.*,b.*   from   a   right   join   b     on   a.id=b.parent_id      

          3)完整外部联接:FULL  JOIN 或 FULL OUTER JOIN
       完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。   

      select   a.*,b.*   from   a   full   join   b     on   a.id=b.parent_id 

jdbc简介

  通过jdbc连接数据库的基本步骤
    导入jar包驱动类
    jdbc语法:jdbc:子协议:厂商内容
    对于mysql而言:?jdbc:mysql://主机地址:端口号/库名
             ? jdbc:mysql://localhost:3306/test

  jdbc获取数据库连接:
    //准备四个参数

    //加载数据库驱动类

    //利用DriverManager的getConnection方法获取数据库连接

    示例代码:

package com.neuedu.manage.util;

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

public class JDBCUtil {
    
      private static Connection connection=null;
      private static String url="jdbc:mysql://localhost:3306/republic";
      private static String username="root";
      private static String password="123456";
      private static String driverClass="com.mysql.jdbc.Driver";
    
    public Connection getConnection(){
        try {
            Class.forName(driverClass);
            connection = DriverManager.getConnection(url, username, password);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return connection;
    }
    
    public static void close(Connection con,Statement statement,ResultSet rSet){
        if(rSet!=null){
            try {
                rSet.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(statement!=null){
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if(con!=null){
            try {
                con.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
原文地址:https://www.cnblogs.com/alternative/p/7353941.html