1. 程式人生 > >配置數據庫連接及數據庫操作

配置數據庫連接及數據庫操作

span strong left ima cat 對數 insert cor pan

主外鍵說明:
  主鍵:是表中一行的一個唯一標識,通過主鍵我們可以快速的查詢一條數據!
  主鍵特性:唯一(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();
            }
        }
    }
}

配置數據庫連接及數據庫操作