数据库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();

            }

      } 

   }

}

猜你喜欢

转载自www.cnblogs.com/xaio-lis/p/10745395.html