安卓基礎_4

數據庫的簡介

數據庫:database
什麼情況下使用數據庫:大量結構化數據需要存儲的時候


數據庫的分類:
            [1]層次結構
            [2]網狀結構
            [3]關係化結構
常見的關係數據庫
            [1]Micrsoft sql server  
            [2]Oracle   
            [3]mysql    
            [4]sqlite    
            [5]HSQL     
            [6]DB2    
            ...

mysql的安裝

mysql -u root -p
feature selection 功能選擇
mysql server
    mysql server
    client programs
    server data files

mysql的數據存儲結構

什麼是服務器
    [1]從硬件上理解:就是一臺高配置的電腦
    [2]從軟件上理解:就是安裝了服務器軟件的電腦,被稱之爲服務器
常見的服務器軟件:
    [1]mysql
    [2]tomcat 
    [3]iis      
    [4]apache   
    [5]jboos    
    [6]weblogic
    ...

sql語言的簡介

SQL:Structured Query Language
[1]sql是結構化語言 不是過程化語言

[2]sql語言 每一句sql語句 都可以單獨執行
[3]sql語言的分類
    DDL (數據定義語言)
        數據定義語言 - Data Definition Language
        用來定義數據庫的對象,
        如數據表、視圖、索引等
    DML  (數據操縱語言)
        數據處理語言 - Data Manipulation Language
        在數據庫表中更新,增加和刪除記錄
        如 update, insert, delete
    DCL (數據控制語言)
        數據控制語言 – Data Control Language
        指用於設置用戶權限和控制事務語句
        如grant,revoke,if…else,while,begin transaction
    DQL (數據查詢語言)
        數據查詢語言 – Data Query Language
        select

使用sql對數據庫進行操作

[1]連接到mysql數據庫
    mysql -u 用戶名 -p
[2]顯示所有的數據庫
    語法:show databases;
        [2.1]information_schema 提供了訪問元數據的方式  數據庫的名字 表名 字段名
        [2.2]mysql mysql的核心數據庫 這個數據裏面的是用戶信息、用戶權限等。
        [2.3]performance_schema mysql5.5以後增加的數據庫,主要收集數據庫信息的(進程等待、鎖、互斥變量、文件信息...等)
        [2.4]test  測試數據庫,沒有任何東西,可以刪除
[3]創建一個新的數據庫
    語法:create database 數據庫名稱;
[4]刪除一個數據庫庫
    語法:drop database 數據庫名稱;
[5]切換數據庫
    語法:use 數據庫名稱;
[6]查看當前使用的是哪個數據庫
    語法:select database();

使用sql對錶進行操作

name  age yuwen yingwu shuxue 
張三  18 20    30 50;             
李四  28 30    50 70; 
王五  38 40    60 80;
[1]創建一張表
    語法:create table 表的名稱(字段1 類型(長度),字段2 類型(長度),...);
[2]查看錶
    語法:show tables;
[3]如何查看錶結構
    語法:desc 表名;
[4]刪除表
    語法:drop table 表名;
[5]mysql數據類型
    字符串型 
        VARCHAR(變長 20) 
        CHAR(定長)長度不夠自動加上空格補全
    大數據類型
        BLOB(binary large object) 存儲二進制(音頻、視頻、圖片)
        TEXT 字符(文本)
    數值型
        TINYINT     ==byte
        SMALLINT    ==short
        INT         ==int
        BIGINT      ==long
        FLOAT       ==float
        DOUBLe      ==double
    邏輯性 
        BIT  
    日期型
        DATE        日期
        TIME        時間
        DATETIME    日期+時間
        TIMESTAMP   自動更新時間

使用sql對錶中的記錄進行操作

[1]約束
    [1.1]非空約束  not  null
         表示數據不能爲空
    [1.2]唯一性約束  unique
         表中的記錄不能重複的
    [1.3]主鍵約束  primary key
         表示非空,唯一性
         自動增長 auto_increment
[2]插入一條數據
    語法:insert into 表名valuse(字段1的值,字段2的值,...)
    insert into 表名 values(字段1,字段2,...);
[2]查詢數據
    語法:
        1)select 字段1,字段2,.... from 表名
        2)select * from 表名 
[3]修改數據
    語法:
        1)update 表名 set 要修改的字段 ="修改後的值" 
        2)update 表名 set 要修改的字段 ="修改後的值" where 條件 
[4]刪除數據
    語法:
        1)delete from '表名' where 條件 根據條件刪除
        2)delete from '表名 '             全部刪除

where條件的使用

語法:
    select * from 表名 where 條件
    update 表名 set 要修改的字段 ="修改後的值" where 條件 
    delete from 表名 where 條件 
1].運算符 <, <=,>, >= ,==
2].in 在某個字段內查詢某個值
3].條件同時滿足 and or
4].like 模糊查詢

[1]創建一張學生表 包含姓名、英語、數學的成績
    create table student(id int primary key,name varchar(20),english int,math int);
[2]插入數據
    insert into student values(0,"zhangsan",94,83);
    insert into student values(0,"lisan",87,43);
    insert into student values(0,"lisi",72,99);
    insert into student values(0,"wangwu",42,97);
    insert into student values(0,"zhaoliu",78,86);
[3]查詢英語成績>80分的同學
    select * from student where english >80;
[4]查詢英語成績是94和42的同學的信息
    select * from student where english in(94,42);
[5]查詢英語成績>=70並且<=90
    select * from student where english >=70 and english <=90
[6]查詢英語成績是94 數學成績是83

[7]模糊查詢同學包含"san"的同學信息
    select * from student where name like '%si%'
[8]as 別名的使用
    select english as 英語 from student;
[9]distinct 去除重複記錄
    select distinct* from student;
[10]排序
    注意:單獨使用的時候不需要加where關鍵字
    [10.1]order by 字段名 asc  升序 如果不指定asc默認就是asc
        select * from student order by english asc;
    [10.2]order by 字段名 desc 降序
        select * from student order by english desc;

聚合函數,

[1]count()函數   
    select count(*) from ...where....
[2]sum()函數 
    select sum(要進行求和字段) from ...where.... 
[3]avg()函數
     select avg(要計算平均數的字段名稱) from …
[4]max()函數 
     select max(字段) from...
[5]min()函數 
     select min(字段) from... 

分組查詢,limit關鍵字

數據: 
    insert into student values(0,"zhangsan",90,80);
    insert into student values(0,"lisan",80,40);
    insert into student values(0,"lisi",70,90);
    insert into student values(0,"wangwu",40,90);
    insert into student values(0,"zhaoliu",70,80);

    insert into student values(0,"zhangsan",90,90);
    insert into student values(0,"lisan",40,20);
    insert into student values(0,"lisi",40,50);
    insert into student values(0,"wangwu",50,70);
    insert into student values(0,"zhaoliu",20,90);

[1]分組查詢:常用於聚合函數,根據一個或多個列對結果集進行分組
    [1.1]統計每個學生的英語成績的總和
    語法:group by 字段 
    select name,sum(english) from student group by name;
[2]having: 使用HAVING 子句原因是,使用分組的時候,WHERE 關鍵字無法與聚合函數一起使用
    [2.1]統計每個學生的英語成績的總和>100;
    select name,sum(english) from student group by name having sum(english)>200;
[3]limit  分頁查詢 
    語法:
        1)limit 數量;
        2) limit 起始位置(不包含起始位置),數量
    [3.1]查詢5條數據
        select * from limit 5;
    [3.2]從第5條記錄開始查,一共查詢4條記錄
        select * from limit 5,4;

navicat工具介紹

JDBC簡介

JDBC:java database connectivity java數據庫連接 
常用的數據庫mysql oracle sqlserver
sun公司提供了一套jdbc的接口,讓數據庫廠商實現。

jdbc->HelloWorld

[1]實現不同數據庫的驅動,不同數據庫廠商都提供了相應的jar包
[2]註冊驅動 DriverManager
[3]和數據庫建立連接
[4]執行sql語句

代碼
    DriverManager.registerDriver(new Driver());
    Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "1q2w3e");
    Statement statement = connection.createStatement();
    String sql = "select * from student";
    ResultSet resultSet = statement.executeQuery(sql);
    resultSet.next();
    int id = resultSet.getInt(1);
    String name = resultSet.getString(2);
    System.out.println("id:" + id + " name :" + name);

DriverManager Connection Statement ResultSet

DriverManager:
    [1]註冊驅動 
        方法1
        DriverManager.registerDriver(new Driver());
        方法2
        Class.forName("com.mysql.jdbc.Driver");
    [2]獲取連接 通道
        DriverManager.getConnection("jdbc:mysql:///mydb1", "root", "1q2w3e");
Connection(創建statement對象)
    [1]獲取一個statement
        connection.createStatement()
    [2]獲取一個preparedStatement 
Statement
    [1]執行sql語句
ResultSet(結果集)
    [1]它是一個遊標,指向數據行,默認指向自斷行,可以指向不同的數據

使用JDBC增刪改查

對jdbc進行封裝

static {
    try {
        Properties properties = new Properties();
        properties.load(new FileInputStream("db.properties"));

        className = properties.getProperty("className");
        url = properties.getProperty("url");
        name = properties.getProperty("username");
        pwd = properties.getProperty("password");

    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

演示登錄邏輯

create table login(id int,username varchar(20),password varchar(20));
insert into login values(1,"san","123");
insert into login values(2,"si","123");
String sql = "select * from login where username ='" + name + "' and password ='" + pwd+"'";

sql注入

select * from login where username = 'san 'or' 1==1' and password =' 123aasdsad'
select * from where username ="san" or 1 ==1 
select * from login where username = 'san \'or\' 1==1' and password = '123aasdsad'

String sql = "select * from login where username = ? and password =?";

PreparedStatement prepareStatement = connection.prepareStatement(sql);
prepareStatement.setString(1, name);
prepareStatement.setString(2, pwd);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章