一.什么是数据库
数据库,简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行增删改查等操作。
之前我们在操作数据是存放在内存里的,但是在内存中无法永久保存,于是我们将数据存放入磁盘当中以文件的形式管理,但是数据的形式多种多样,在存储和处理数据方面比较繁琐,于是数据库的优点就体现出来了。
二.什么是mysql
数据库分为分为关系型数据库(SQL)和非关系型数据库(NOSQL),而mysql属于关系型数据库。
在mysql中,要通过SQL语句去操作数据库,SQL语言也是单独的一门语言,只不过其是用来操作数据库的。
1.SQL语句分类
SQL语句分为:
- DQL:数据查询语言
- DML: 数据定义语言(对表中的数据进行操作)
- DDL:数据定义语言(对表结构进行操作)
- TCL:事务控制语言
- DCL:数据控制语言
后面主要简单说一说DQL和DML。
和java一样,在SQL语句中也是有着数据类型的,现在我们讲一讲一些常用的数据类型:
2.常用基本数据类型
- int (整型数据类型)
- double(浮点型数据类型)
- char(字符串固定大小)
- varchar(可变字符串,类似java中的String)
- blob(存储二进制(字节)的大对象数据,可以存储tup,视频等)
- text(clob:用来存储大型文本数据)
- -data (YYYY-MM-DD 日期格式)
- datatime (YYYY-MM-DD HH:mm:ss 最常用的时间格式)
三.SQL语句
注:在SQL语句中不区分大小写,每一句以分号结尾,所有符号使用英文格式
1.DQL语句(查询语句)
DQL是数据查询语句,关键词为select
简单查询
-- 查看当前MySQL的版本
select version();
-- 查看当前使用的数据库
select databases();
-- 查看指定表的字段(如果要查询多个字段用逗号隔开)
select age from student;
-- 查看表中的所有数据(或者将*转化为所有的字段,使用*效率低)
select * from student;
-- 给列取别名(也可以把‘as’用空格替换)
select `name` as studentName from student;
条件查询
select `字段名1`,`字段名2,···`from `表名` where 判断条件;
2.DML语句
插入数据
insert into `表名`(`字段1`,`字段2`,`字段3`,···) values ('值1','值2','值3');
-- 注意 :
-- 字段或值之间用英文逗号隔开 .
-- ' 字段1,字段2...' 该部分可省略 , 但添加的值务必与表结构,数据列,顺序相对应,且数量一致 .
-- 可同时插入多条数据 , values 后用英文逗号隔开 .
删除数据
delete from `表名` where 判断条件;
-- 注:where后面为判断条件,如果不加where子句,则会删除所有数据。
修改数据·
update `表名` set `字段名1`= 值1 , `字段名2`= 值2 ,··· where 判断条件;
-- 注:where后面为判断条件,如果不加where子句,则会修改所有数据。
where字句:
可以简单的理解为 : 有条件地从表中筛选数据,然后在进行前面的增删查改操作。
3.一些简单的DDL语句
SHOW DATABASES -- 查看所有数据库
DROP DATABASE `数据库名` -- 删除数据库
USE `数据库名` -- 使用数据库
SHOW TABLES -- 展示所有表
四.我的第一个JDBC程序
JDBC代表Java数据库连接(Java Database Connectivity),它是用于Java编程语言和数据库之间的数据库无关连接的标准Java API,换句话说:JDBC是用于在Java语言编程中与数据库连接的API,其内部封装好了如何操作数据库的方法,开发者只需要将SQL语句用字符串的形式作为参数传入即可。
(这里我使用的是驱动jar包是8.0以上的)
首先我们创一个数据库,并且在这个数据库下创建一个数据表,填入一些数据信息:
例:
代码示例:(数据库名为studmessage)
import java.sql.*;
public class Main {
public static void main(String[] args) {
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
//获取类的加载器(加载驱动)
Class.forName("com.mysql.cj.jdbc.Driver");
//url和用户信息
String url = "jdbc:mysql://localhost:3306/studmessage?useUnicode=true&characterEncoding=utf8&useSSL=true";
String name = "root";
String password = "123456";
/**
* URL参数详解:
* localhost:3306 :本地地址与mysql端口号
* studmessage: 数据库名(写自己的数据库名)
* ? : 连接参数
* useUnicode=true : 使用Unicode码
* characterEncoding=utf8 :使用UTF-8编码集
* useSSL=true 使用安全的连接
*/
//返回数据库对象,将url和用户信息传入getConnection的方法之中
connection = DriverManager.getConnection(url, name, password);
//返回操作数据库的对象
statement = connection.createStatement();
//将sql语句以字符串的形式保存
String sql = "select * from student";
//再将sql语句以参数的形式传入executeQuery
//得到一个结果集(ResultSet的对象)
resultSet = statement.executeQuery(sql);
while (resultSet.next()) {
System.out.println("id = " + resultSet.getObject("id"));
System.out.println("name = " + resultSet.getObject("name"));
System.out.println("sex = " + resultSet.getObject("sex"));
System.out.println("dateOfBirth = " + resultSet.getObject("dateOfBirth"));
System.out.println("dateOfAdmission = " + resultSet.getObject("dateOfAdmission"));
System.out.println("college = " + resultSet.getObject("college"));
System.out.println("major = " + resultSet.getObject("major"));
System.out.println("nativePlace = " + resultSet.getObject("nativePlace"));
System.out.println("nation = " + resultSet.getObject("nation"));
System.out.println("***********************************************");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
//资源关闭
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
示例输出:
id = 1
name = 张三
sex = 男
dateOfBirth = 2002-09-20
dateOfAdmission = 2021-11-09
college = 电气与信息工程学院
major = 软件工程
nativePlace = 云南昆明
nation = 汉族
代码中的一些方法介绍:
executeQuery(string sql) :
将sql语句以参数的形式传入,得到一个查询出来的结果集(ResultSet的对象)。
executeUpdate(string sql):
将sql语句以参数的形式传入,返回一个int值,该值表示数据库中收影响的数据条数
next()
ResultSet(结果集) 指针的初始位置位于第一条数据之前,每使用一次next()指针就会移动到下一行数据,有数据则返回true,否则返回false。
getObject(String columnLabel)
columnLabel : 数据库里面的字段名
返回此时指针所在那一行数据对应字段名的数据。
注意:在资源关闭时应该按照需关闭资源的产生的先后顺序反过来关闭。