在现代的程序开发中,大量的开发都用到了数据库。使用数据库可以方便地实现数据的存储及查询,以下对Java的数据库操作技术——JDBC进行学习。
一、JDBC概述
1)JDBC(Java Database Connectivity,Java数据库连接),提供了一种与平台无关的用于执行SQL语句的标准Java API,可以方便地实现多种关系数据库的统一操作,它由一组用Java语句编写的类和接口组成。
在实际开发中可以直接使用JDBC进行各个数据库的连接与操作,而且可以方便地向数据库中发送各种SQL命令。在JDBC中提供的是一套标准的接口。这样,各个支持Java的数据库生产商只要按照此接口提供相应的实现,就可以使用JDBC进行操作,极大地体现了Java的可移植性的设计思想。
2 ) JDBC本身提供的是一套数据库操作标准,同时这些标准需要各个数据库厂商实现,所以针对每一个数据库厂商都会提供一个JDBC的驱动程序,目前比较常见的JDBC驱动程序可分为如下4类:
- JDBC-ODBC桥驱动
- JDBC本地驱动
- JDBC网络驱动
- 本地协议纯JDBC驱动
二、MySQL数据库
- 创建数据库:CREATE DATABASE 数据库名称;
- 删除数据库:DROP DATABASE 数据库名称;
mysql> create table firstTable(
-> id INT AUTO_INCREMENT PRIMARY KEY,
-> name VARCHAR(30) NOT NULL,
-> password VARCHAR(32) NOT NULL,
-> age INT NOT NULL
-> );
三、SQL语法基础
- DML(Data Manipulation Language,数据操作语言):用于检索或者修改数据。
- DDL(Data Definition Language,数据定义语言):用于定义数据的结构,如创建、修改该或者删除数据库对象。
- DCL(Data Control Language,数据控制语言):用于定义数据库用户的权限。
use firstdb;
drop table if exists user;
create table user
(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
password VARCHAR(32) NOT NULL,
age INT NOT NULL,
sex VARCHAR(6) DEFAULT 'male',
birthday DATE
);
运行脚本如下:
Database changed
Query OK, 0 rows affected (0.11 sec)
Query OK, 0 rows affected (0.09 sec)
序号 | 数据类型 | 长度 | 描述 |
1 | TINYINT(M)、BIT、BOOL、BOOLEAN | 1 | 如果为无符号数,则存储在0~225的数,否则可以存储从-128~127的数 |
2 | SMALLINT(M) | 2 | 如果为无符号数,则存储在0~65335的数,否则可以存储从-32768~32767的数 |
3 | MEDIUMINT(M) | 3 | 如果为无符号数,则存储在0~16777215的数,否则可以存储从-8388608~8388607的数 |
4 | INT(M)、INTEGER(M) | 4 | 如果为无符号数,则存储在0~4294967295的数,否则可以存储从-2147483648~2147483647的数 |
5 | BIGINT(M) | 8 | 如果为无符号数,则存储在0~18446744073709551615的数,否则可以存储从-9223372036854775808~9223372036854775807的数 |
6 | FLOAT(precision) | 4或8 | 这里的precision是可以直达53的整数。如果precesion<=24则转换为FLOAT,如果precision>24并且precision<=53则转换为DOUBLE |
7 | FLOAT(M,D) | 4 | 单精度浮点数 |
8 | DOUBLE(M,D)、DOUBLE PRECISION、REAL | 8 | 双精度浮点数 |
9 | DECIMAL(M,D)、DEC、NUMERIC、FIXED | M+1或M+2 | 未打包的浮点数 |
10 | DATE | 3 | 以YYYY-MM-DD的格式显示 |
11 | DATETIME HH:MM:SS | 8 | 以YYYY-MM-DD的格式显示 |
12 | TIMESTAMP | 4 | 以YYYY-MM-DD的格式显示 |
13 | TIME | 3 | 以HH:MM:SS的格式显示 |
14 | YEAR | 1 | 以YYYY的格式显示 |
15 | CHAR(M) | M | 定长字符串 |
16 | VARCHAR(M) | 最大M | 变长字符串。M<=255 |
17 | TINYBLOB、TINYTEXT | 最大255 | TINYBLOB为大小写敏感,而TINYTEXT不是大小写敏感的 |
18 | BLOB、TEXT | 最大64KB | BLOB为大小写敏感的,而TEXT不是大小写敏感的 |
19 | MEDIUMBLOB MEDIUMTEXT | 最大16MB | MEDIUMBLOB为大小写敏感的、而MEDIUMTEXT不是大小写敏感的。 |
20 | LONGBLOB LONGTEXT | 最大4GB | LONGBLOB为大小写敏感的,而LONGTEXT不是大小写敏感的 |
21 | ENUM(VALUE1,...) | 1或2 | 最大可达65535个不同的值 |
22 | SET(VALUE1,…) | 可达8 | 最大可达64个不同的值 |
888', 26, 'male', '1987-1-1');
Query OK, 1 row affected (0.13 sec)
666', 23, 'female', '1989-1-1');
Query OK, 1 row affected (0.05 sec)
3)删除数据
删除表中的数据,可以使用如下的格式:
DELETE FROM 表名称[删除条件];
在进行删除数据时,最好指定删除的条件,若没有指定,则表示删除一张表中的全部数据。
例如删除id为1的数据:
DELETE FROM user WHERE id=1
4)更新数据
当需要修改数据表中的某些记录时,就可以使用update语句,格式如下:
UPDATE 表名称 SET 字段1=值1, ..., 字段n=值n [WHERE 更新条件];
修改时也需要指定修改条件,否则数据表的全部记录都将被修改。一般的条件都使用id表示。
例如:
UPDATE user SET name='xxx', age=5, birthday='2012-1-1' WHERE id=2;
5)查询数据
在SQL语法中,如果要查看表中的记录内容,可以通过查询语句完成,可以通过查询语句完成,用户发出查询指令时会将全部的查询结果返回给用户,查询语句的格式如下:
SELECT {*|column alias}
FROM 表名称 别名
[WHERE condition(s)]; -->设置查询条件
查询全部数据:
SELECT * FROM user;
查询user表中的姓名和生日:
SELECT name, birthday FROM user;
查询姓名或密码中包含字母m的用户:
SELECT * FROM user WHERE name LIKE '%m%' OR password LIKE '%m%';
上述查询语句中使用了LIKE语句,用于进行数据的模糊查询,其中%表示匹配任意的数据。以上的查询是将全局的数据都取了出来,如果要想取出数据库表中的一部分数据,则在查询的最后加上一个LIMIT语句即可。格式如下:
SELECT 字段 FROM 表 WHERE 条件 LIMIT 开始行,取出的数据个数;
例如(取出第1~5行的记录):
SELECT * FROM user WHERE name LIKE '%m%' OR password LIKE '%m%' LIMIT 0,5;
这种SQL语句在Java分页开发中使用非常广泛。
在当前的开发中一般比较常见的数据库有Oracle、DB2、MySQL等。这些数据库在使用时都支持标准的SQL语法操作,所以各个数据库只要了解其基本命令就可以很快滴上手开发。
以上内容来自于《Java开发实战经典》