數據庫SQL的基礎知識及java連接數據庫的基本操作過程


數據庫SQL的基礎知識

【補充數據庫基本知識點】

數據庫是按照一定的數據結構來組織、存儲和管理數據的倉庫

數據庫管理系統是一種操縱和管理數據庫的大型軟件,用於建立、使用和維護數據庫

 

1、數據庫表的完整性約束:域約束(表中字段取值范圍)、主碼約束(主鍵,唯一確定一條記錄)、外碼約束(表中一個字段,確實另外一張表的主碼)

用SQL語句生成外鍵:

//為foods表的CategoryId字段生成外鍵fk_Foods_Category

alter table foods add constraint fk_Foods_Category  foreign key(CategoryId)  references Category(id);

 

####-----增加外鍵的方法------#####

#######alter table 需加外鍵的表 add constraint 外鍵名 foreign key(需加外鍵表的字段名) referencnes 關聯表名(關聯字段名);#####

 

2、SQL語句補充

在描述SQL有關語句格式時,常常用到一些符號

[ ] :表示可選項,即方括號中內容可以根據需要進行選擇

{ } :表示必選項

<> :表示尖括號中的內容是用戶必須要提供的參數

| : 表示有多個選項時只能選擇一項,多個選項之間用 ‘ | ’隔開

[ , …n] : 表示前面的項可重復n次,相互之間用‘ ,’隔開

 

A、 創建數據庫的SQL命令

CREATE DATABASE<數據庫名>

Eg: CREATE DATABASE Student;//創建Student數據庫

  

B、 表的操作

(1)sql語句創建表

          CREATE TABLE<表名>(<字段名><數據類型>[<字段完整性約束>],<字段名><數據類型>[<字段完整性約束>]…,<字段名><數據類型>[<字段完整性約束>]);

 

       Eg:CREATE TABLE Students(sno CHAR(9) NOT NULL PRIMARY KEY,

sName CHAR(12) NOT NULL , sex CHAR(2) , age INT);

     

      (2) 刪除表

          DROP TABLE<表名>

 

     (3)修改表結構

         ALTER TABLE<表名>[ALTER COLUMN <字段名><數據類型>] |

         ADD COLUMN 子句—增加新字段及相應的完整性約束條件

         DROP COLUMN 子句 –刪除表中字段

         DROP CONSTRAINT 子句—刪除完整性約束

Eg:

ALTER TABLE Student ADD COLUMN phone CHAR(11);

 

C、 表數據操作

(1)    插入數據:

INSERT INTO<表名>[(<字段名>[,<字段名>]…)] VALUES(<值>[,<值>]…)

Eg:

Insert into Student(sNO,sName,sex,age) values(‘201201009’,’隔壁老王’,‘男’,18);

 

(2)    修改數據

UPDATE <表名> SET <字段名>=<表達式>[,<字段名>==<表達式>[WHERE <條件>];

Eg:update Student set age=20 where sNO=‘201201009’;

 

(3)    刪除數據

DELETE FROM <表名>[WHERE <條件>]

Eg:delete from Student where sNo=’201201009’;

 

(4)   查詢數據

    

     SELECT [ALL | DISTICT][TOP n [PERCENT]]{ * | {<字段名>|<表達式>|}

[[AS <別名>]|<字段名>[[AS] <別名>]][ , …n]}

FROM <表名>[WHERE <查詢條件表達式>]

[GROUP BY <字段名>[HAVING<分組條件>]]

[ORDER BY <次序表達式>[ASC | DESC]];

 

參數說明:

ALL—顯示結果集中的所有數據,包括重復行,ALL是默認設置

DISTINCT—顯示結果集中不重復的所有行

GROUP BY 子句—按照<字段名>進行分組,該字段值相同的分為一個組,分組后每組只顯示一個結果;如果GROUP BY子句帶HAVING 子句,則只有滿足HAVING指定條件的組才會輸出,有過GROUP BY 有多個字段名,則按照第一個字段分組,再按照第二個字段分組,以此類推

HAVING 子句---分組條件與WHERE 子句中的條件格式類似

ORDER By 子句---只有兩個結果一個是ASC升序(系統默認),一個DESC降序;ORDER BY子句需要放到查詢語句的最后

 

A、 簡單查詢

Eg:Select sNO as 學號,sName as 姓名 from Student where age betwwen 18 and 20 ;

將年齡在18到20及之間滿足條件的結果返回

【注】v1 betwwen v2 and V3 相當於v1>=v2 and v1<=v3

      v1 not betwwen v2 and V3 相當於v1<v2 and v1>v3

 

Where 常用的運算符及功能

 運  算  符

功  能

=、>、<、>=、<=、!=、<>

比較范圍

betwwen and、not betwwen and

在某個范圍之間(包含兩端)

In 、not in

數據在某一個集合

Like 、not like

字符模糊匹配

Is null、is not null

判斷空值

and、or、not

邏輯運算(與或非)

 

B、 多重條件查詢

Eg:select * from Student where dep=’計算機’ and sex=‘男’;

C、 模糊查詢

<字段名>[not] like <匹配串>

模糊查詢時<匹配串>中可以含有的通配符

通配符

功能

實例

%

代表0個或多個字符

‘ab%‘ 表示’ab’后可接任意字符串

_(下划線)

代表一個字符

‘a_b’表示‘a’與‘b‘之間可為任意單個字符

 [ ]

代表在某一范圍的字符

[0-9]表示0~9之間的字符

[^ ]

表示不在某一范圍的字符

[^0-9]表示不在0~9之間的字符

 

Eg:select * from student where sName Like ’李%’;

 

D、  常用的統計函數匯總查詢

常用的統計函數及功能

函  數  名

功  能 

AVG(<字段名>)

求字段名所在列的平均值(必須是數值型)

SUM(<字段名>)

求字段名所在列的總和(必須是數值型)

MAX(<字段名>)

求字段名所在列的最大值

MIN(<字段名>)

求字段名所在列的最小值

COUNT(*)

統計個數

COUNT([DISTINCT])<字段名>

統計不重復列的個數

 

Eg:select AVG(grade) as 平均成績 from score;

E、 OEDER BY 子句

Eg:select sNo,grade from Score where cNo=‘c001‘ ORDER BY grade DESC;

F、 分組數據

GROUP BY子句可以按照關鍵字段的值來組織數據,關鍵字段相同的為一組,一般情況之下可以根據表中的某一個字段進行分組,並且要求使用統計函數,這樣每一個分組就只有一個記錄

Eg:

              Select cNO,COUNT(*) as 人數 from Score GROUP BY cNO;

 

 

 

java連接數據庫的基本操作過程

1、 JDBC是java程序中訪問數據庫的標准API,jdbc給java程序員提供訪問和操縱眾多關系數據庫的一個統一的接口。

2、 JDBC的分類:

SQL Server JDBC、MySQL JDBC、Oracle JDBC、JDBC-ODBC(連接ACCESS)

3、 JDBC中主要的類與接口(有顏色的代表接口)

 

JDBC中主要的類與接口

類與接口

功    能    說   明

DriverManager

負責加載各種不同的驅動程序,根據不同的請求返回相應的

SQLException

代表數據庫連接的建立、關閉或SQL語句的執行過程中發生的異常

Connection

數據庫連接,負責與數據庫間通訊

Statement

用以執行不含參數的靜態SQL查詢和更新,並返回執行結果

PreparedStatement

用以執行包含參數的動態SQL查詢和更新

CallableStatement

用以獲得數據庫的存儲過程

ResultSet

獲得SQL查詢結果

 

【注】使用JDBC訪問數據庫的基本步驟為:加載驅動程序、建立與數據庫的連接、創建執行方式語句、執行SQL語句、處理返回結果和關閉創建的各種對象。

 

4、 建立與數據庫的連接

(1)     加載JDBC驅動程序:利用Class.forName(JDBCDriverClass);

forName()是Class的靜態方法,參數JDBCDriverClass是要加載的JDBC驅動程序類的名稱,它是以字符串形式表達的類長名。

 

 

數據庫的常用驅動程序類

數據庫

驅動程序類

Access

sun.jdbc.odbc.JdbcOdbcDriver

SQL Server

com.microsoft.sqlserver.jdbc.SQLServerDriver

MySQL

com.mysql.jdbc.Driver

Oracle

oracle.jdbc.driver.OracleDriver

Eg:

Class.froName(“com.mysql.jsbd.Driver”);//加載MySQL數據庫驅動

 

【注】創建數據庫連接時Driver Manager類的常用方法

Public static Connection getConnection(String url,String user,String password);

url為鏈接數據庫的url連接,用戶名和密碼為登錄數據庫的用戶名和密碼

DriverManager類的getConnection()是實現建立JDBC驅動程序到數據庫連接的方法一般格式如下:

Connection conn=DriverManager.getConnection(url,user,password);

 

JDBC的URL

數據庫

URL模式

Access

jdbc:odbc:dataSource

SQL Server

jdbc:sqlserver://hostname:port#;DatabaseName=dbname

MySQL

jdbc:mysql://hostname:3306/dbname

Oracle

jdbc:oracle:thin:@hostname:port#:oracleDBSID

 

例如連接MySQL數據庫的操作:

Connection conn=DriverManager.getConnection(“jdbc:mysql://localhost:3306/Student”,”root”,”123456”);

簡單操作數據庫的實例代碼

package com.database;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

public class dataBaseConnection {

   //要加載的驅動類型

   private static String driver="com.mysql.jdbc.Driver";

   //連接數據庫的URl

   private static String url="jdbc:mysql://localhost:3306/foods";

   //登錄數據庫的用戶名

   private static String user="root";

   //登錄數據庫的密碼

   private static String password="root";

   public static void main(String[] args) {

      Connection conn=null;

      Statement stm=null;

      ResultSet  rs=null;

      String selectsql ="select * from foods where CategoryId=1";

      try {

         //加載驅動,同時需要在項目中add libraries連接驅動程序mysql-connector-java-5.1.26-bin.jar

         Class.forName(driver);

         //創建數據庫連接

         //conn=DriverManager.getConnection(url);這是錯誤方式,數據庫登錄用戶名和密碼沒有添加

         conn=DriverManager.getConnection(url,user,password);

         //利用連接對象conn創建Statement接口對象,類似於游標的作用

         stm=conn.createStatement();

         //將sql語句作為參數傳遞給Statement的查詢方法

         rs=stm.executeQuery(selectsql);

         //遍歷查詢結果集中的元素

         while(rs.next()){

            //利用集合中的getXXX(Colum)方法獲得數據庫表中Colum的內容

            int foodsId=rs.getInt("FoodsId");

            int CategoryId=rs.getInt("CategoryId");

            String ChineseName=rs.getString("ChineseName");

            String English=rs.getString("English");

            String Description=rs.getString("Discription");

            System.out.println(foodsId+" "+CategoryId+" "+ChineseName+" "+English+" "+Description);          

         }

      } catch (Exception e) {

         e.printStackTrace();

      }finally{

            try {

                //關閉結果集對象

                if(rs!=null) rs.close();

                //關閉Statement對象

                if(stm!=null) stm.close();

                //關閉JDBC與數據庫的連接對象

                if(conn!=null) conn.close();         

            } catch (SQLException e) {

                e.printStackTrace();

            }

      } 

   }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM