关于Java数据库程序设计的一些基本知识(上篇)

Java数据库程序设计,首先要了解一点数据库系统。

数据库系统包含三个方面:

1、存放数据的数据库

2、处理数据的DBMS(data basic management system)数据库管理系统

3、提供数据的应用程序

  目前,多数数据库系统都是基于关系数据模型的关系数据库系统,即数据以若干二维表的形式储存,这种模型又有三个要素:结构(数据的表示)、完整性(约束条件)和语言(处理数据方式)

关系数据库中,每个二维表名称唯一,其中行叫“记录”,列叫“字段”,举例学生信息如下以助理解记录与字段的含义:

Student

No.

Name

Age

Sex

1605001

Li 4

18

M

1605002

Zh 3

19

W

Score

No.

Subject

Score

1605001

Java

88

1605001

Math

92

1605002

Math

91

1605002

English

85

完整性约束

完整性约束有三种类型:域约束,主码约束,外码约束。

1、域约束。指对字段的取值范围进行约束,比如Score值设置在0~100;也可指定是否允许字段值为null

2、主码约束。主码也被称为主键,是一个表中用于唯一确定一条记录的一个字段或最小字段的字段组,由数据库设计者在设计时指定。主码可由一个字段组成,也可由多个字段组成(复合主码),若一张表有多个可被作为主码的字段,则称它们为候选码()

3、外码约束。外码是表与表之间的纽带,指某表中字段不是该表的主码,却是另一表的主码,则称它为该表的外码。比如Score表中,No.并不是Score的主码(不能唯一确定一个记录),却是Student表的主码,因此称No.Score表的一个外码,通过它将两表建起联系。

有一点值得注意的是,虽然所有数据库系统都支持主外码,但并非所有数据库都支持域约束

 

SQL

  SQL感觉对初学者来说要比DBMS更熟悉(至少对我来说是这样)以致估计不少人就直接把SQL当数据库了。其实,SQL的全称是Structured Query Language结构化查询语言,也就是操作数据库的程序语言。用它就可以在任何关系数据库管理系统(SQL Server, MySQL,Oracle,Sybase,IBM DB2,MS Access)中对数据库进行操作了。但是,SQL虽对关系数据库管理系统通用,但一些DBMS在基础的SQL上进行了扩展,这些扩展特性在另一个DBMS中未必也是可用的。

注:

SQL中的关键字不区分大小写

SQL中不区分CharString且两者界定符单双引号皆可用。

③下文所用的几个符号规范介绍:关键字大写;数据库与表名与Java的类一样;字段名与Java的变量一样;[]表可选,{}表必选,<>表用户必须提供,|表单选,[,2,...n]表可重复n

下面以MySQL为例介绍一下数据库的基本操作

1.创建数据库:

CREAT DATABASE<Name>

2.创建表:

CREAT TABLE<Name>(<字段名><数据类型>[<字段级完整性约束>][,2,...n][,<表级完整性约束>]);

完整性约束主要有NULL&NOT NULL是否可为空,  PRIMARY KEY主码,  UNIQUE值具有唯一性

3.删除表: 

DROP DATABASE<Name>

4.修改表结构:

ALTER TABLE<Name>

[ALTER COLUMN<字段名><数据类型>]    |

[ADD COLUMN<字段名><数据类型>[<字段级完整性约束>]   |

[DROP COLUMN<字段名>]  | [DROP CONSTRAINT<完整性约束>]

5.表数据操作:包括增删查改四部分,对应命令INSERT, DELETE, SELECT, UPDATE

INSERT INTO<Name>[ (<字段名[,...,n]>) ] VALUES (<>[,...,n]);

若不指定字段,则数据排列顺序应和创建表时字段顺序一致。

UPDATE<Name> SET<字段名>=<表达式>[,<字段名>=<表达式> WHERE<条件>]

DELETE FROM<Name>[WHERE<条件>];

WHERE省略则对整个表中数据进行操作

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

[ [AS]<别名>|<字段名>[AS]<别名>]}[,...,n] ]

FROM<表名>[WHERE<查询条件表达式>]

 [GROUPED BY<字段名表>[HAVING<分组条件>] ]

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

参数说明:ALL|DISTINCT表示是否显示重复记录,TOP n [PERCENT]表示在结果中输出前多少条,*表示全部字段,AS<别名>表示结果中用别名替换字段名显示,GROUPED BY表示按照<字段名表>的值以HAVING的条件将记录进行分组,每组只返回一个结果,ASC|DESC表示升降序

 

数据库的表达式类似其它语言,也有很多对应运算符,列举常用如下:

WHERE常用运算符表

=,<,>,>=,<=,!=

比较大小

BETWEEN AND,NOT BETWEEN AND

确定范围

IN,NOT IN

确定集合

LIKE,NOT LIKE

字符匹配

IS NULL,IS NOT NULL

判断空值

AND,OR,NOT

逻辑表示(多重条件)

LIKE&NOT LIKE的匹配串中通配符

通配符

功能

举例

%

代表0~n个字符

'%'

下划线

代表单个字符

'_'

[]

在某一范围内的字符

[0-9]

[^]

不在某一范围内的字符

[^0-9]

常用函数(详见百度,嘻嘻)

AVGexpression

按列计算平均值

SUMexpression

按列计算值的总和

MAX(expression

求一列中的最大值

MIN(expression

求一列中的最小值

COUNT(expression

(*)统计记录总数,([DISTINCT]<字段名>)统计相应字段非空值数,[]表示不包括重复值

STDEVexpression

返回表达式中所有数据的标准差

 

 

创建学生信息数据库举例:CREATE DATABASE StudentScore;

CREATE TABLE Student(sNo CHAR(9) NOT NULL PRIMARY KEY,sName CHAR(10) NOT NULL,sAge CHAR(7),sSex CHAR(2));
CREATE TABLE Teacher(tNo CHAR(9) NOT NULL PRIMARY KEY,tName CHAR(10) NOT NULL,tAge INT,tSex char(2));
DROP TABLE Teacher;
ALTER TABLE Student CHANGE COLUMN sAge INT;
INSERT INTO Student(sNo,sName,sAge,sSex) VALUES('1605001','大狗',18,'M');
INSERT INTO Student(sNo,sName,sAge,sSex) VALUES('1605002','铁蛋',19,'M');
INSERT INTO Student(sNo,sName,sAge,sSex) VALUES('1605003','小花',18,'W');
INSERT INTO Student(sNo,sName,sAge,sSex) VALUES('1605004','丽丽',20,'W');
INSERT INTO Student(sNo,sName,sAge,sSex) VALUES('1605005','李大',21,'M');
INSERT INTO Student(sNo,sName,sAge,sSex) VALUES('1605006','李二',19,'M');
INSERT INTO Student(sNo,sName,sAge,sSex) VALUES('1605007','小明',18,'W');
INSERT INTO Student(sNo,sName,sAge,sSex) VALUES('1605008','大宝',18,'W');
UPDATE Student SET sAge=19 WHERE sNo='1605001';
DELETE FROM Student WHERE sNo='1605002';
SELECT * FROM Student GROUPED BY SUBSTRING(sName,1,1);  //查询Student表中所有信息并按sName中第一个字分组显示


其实,安装并配置好MySQL后,建表等一系列操作都可以无需打代码,只要输入名称之类参数,按下Apply,程序就会自动生成代码。(关于如何安装与配置MySQL,推荐文章:初学者使用MySQL_Workbench 6.0CE创建数据库和表,以及在表中插入数据。)

此外,当然也可以用Mysql的控制台输入指令:

    

本篇暂时介绍到这里,下篇介绍如何用Java程序访问数据库,感谢阅读!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值