目录
1.若没有Maven项目,可以选择新建
步骤一:点击 File --> New --> Project
步骤二:点击 Maven Project
步骤三:点击Browse...选择存放项目的文件夹(或者保持默认位置)
步骤四:默认选项,直接点击next
步骤五:按要求填入标识,项目名称和默认包名
1. Group Id
- 含义:项目所属组织 / 团体的唯一标识,通常采用反向域名格式(比如公司域名是 hy.com,则 Group Id 写为 com.hy)。
2. Artifact Id
- 含义:项目本身的唯一名称(比如这里的 javamavendemo)。
3. Version
- 含义:项目的版本号(比如 0.0.1-SNAPSHOT)。
4. Package
- 含义:Java 代码的默认包名,用于组织项目内的类(避免不同类重名)。
步骤六:点击Finish完成Maven项目的创建
2.添加Maven依赖
若使用 Maven 管理项目,直接在pom.xml中添加依赖(自动下载驱动):
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
3.数据库的创建
这里使用的是Navicat创建数据库
3.1 新建连接 --> 创建数据库
步骤一:新建连接,点击连接 --> MySQL(或者点击文件 --> 新建连接 --> MySQL 同理)
步骤二:输入连接名和密码,点击左下角测试连接,确保连接成功,然后点击确定
步骤三:右击创建的连接(如这里的localmysql),点击新建数据库
步骤四:输入数据库名,字符集和排序规则,点击确定,数据库创建完成
3.2 创建数据库表
步骤一:点击新建查询,右边紫色方框中选择创建的连接和数据库
步骤二:了解基本数据库语句
-- 1.DDL(数据定义语言):CREATE、DROP 、ALTER,只能执行一次 --
-- 2.DML(数据操纵语言):INSERT、UPDATE 、DELETE,可以执行多次 --
-- 3.DQL(数据查询语言):SELECT,可以执行多次 --
-- 1.1 创建t_emps表 --
CREATE TABLE t_emps(
eid INT PRIMARY KEY auto_increment, -- 员工的编号
ename VARCHAR(20) NOT NULL, -- 员工的姓名
epwd CHAR(8) NOT NULL, -- 员工的密码
ebirthday datetime, -- 员工的出生年月,不设计年龄字段,会造成字段冗余
esalary DOUBLE NOT NULL, -- 员工的工资
eaddress VARCHAR(100) -- 员工的地址
)
-- 1.2 删除t_emps表 --
DROP TABLE t_emps
-- 1.3 修改表:给 t_emps 表添加一个字段,字段名称为:状态estate int类型 --
ALTER TABLE t_emps ADD estate INT;
-- 2.1 插入数据 --
INSERT INTO t_emps(ename,epwd,ebirthday,esalary,eaddress,estate)
VALUES('赵五','11111','2000-05-28',90000.56,'南京',1);
INSERT INTO t_emps(ename,epwd,ebirthday,esalary,eaddress,estate)
VALUES('李六','22222','2004-06-15',88000.69,'盐城',1);
-- 2.2 更新表的字段值 --
UPDATE t_emps SET estate =1 WHERE eid =2;
UPDATE t_emps SET estate =0 WHERE eid =1;
-- 2.3 删除表中的数据 --
DELETE FROM t_emps
-- 3 查询表 --
SELECT * FROM t_emps
-- SQL 聚合函数是数据统计分析的核心工具,常用场景包括: --
-- 统计总数(COUNT(*))、求和(SUM())、求平均(AVG()) --
-- 找最大 / 最小值(MAX()、MIN()) --
-- 分组统计(GROUP BY+ 聚合函数)、筛选聚合结果(HAVING) --
-- 查询表中信息数量 --
SELECT count(*) FROM t_emps
-- 查询表中符合条件的数量(count()括号内有什么,什么就不能为NULL) --
SELECT count(ename) FROM t_emps WHERE ename = '李六' AND epwd = '22222'
-- 查询表中最大/小值,平均值和总值 --
SELECT max(esalary) FROM t_emps
SELECT min(esalary) FROM t_emps
SELECT avg(esalary) FROM t_emps
SELECT sum(esalary) FROM t_emps
-- 查询表 --
SELECT * FROM t_emps
INSERT INTO t_emps(ename,epwd,ebirthday,esalary,eaddress,estate)
VALUES('李老八','22222','1996-12-30',5600,'无锡',1);
INSERT INTO t_emps(ename,epwd,ebirthday,esalary,eaddress,estate)
VALUES('赵二','22222','1996-12-30',5800,'无锡',0);
-- 带条件查询 --
SELECT * FROM t_emps WHERE ename = '李六';
-- 模糊查询 LIKE --
SELECT * FROM t_emps WHERE ename LIKE '李%';
-- 查询李字开头,只有一个字的所有的员工信息 --
SELECT * FROM t_emps WHERE ename LIKE '李_';
SELECT * FROM t_emps WHERE ename LIKE '李__';
-- 查询李字开头,员工的数量 as 可选,起个别名 --
SELECT count(ename) as cn FROM t_emps WHERE ename LIKE '李%';
-- 范围的查找,工资大于6000的员工的信息 --
SELECT * FROM t_emps WHERE esalary > 6000;
-- 查询工资在5000和10000之间的员工信息 --
SELECT * FROM t_emps WHERE esalary >= 5000 and esalary<=10000;
SELECT * FROM t_emps WHERE esalary BETWEEN 5600 and 10000;
-- 查询工资最高的员工的姓名 子查询 一个结果作为另外一个查询的条件 --
SELECT ename FROM t_emps WHERE esalary =(SELECT max(esalary) FROM t_emps)
-- 多值查询,员工的籍贯属于南京或无锡的员工的信息 --
SELECT * FROM t_emps WHERE eaddress in ('南京','无锡')
-- 查询员工的来源地有哪些 去除重复的值用DISTINCT --
SELECT eaddress FROM t_emps
SELECT DISTINCT eaddress FROM t_emps
-- 查询员工来源地的数量分布 分组查询 --
SELECT count(ename), eaddress FROM t_emps GROUP BY eaddress
-- 查询员工来源地的数量分布大于1个人 分组查询限制条件的关键字HAVING --
SELECT count(ename) cn, eaddress FROM t_emps GROUP BY eaddress
HAVING cn>1
-- 出生年月,没有写直接的年龄,age这个字段,一个表中不要出现冗余字段,
-- 表中的字段都是独立的,不要通过一个字段的计算方式得到另外一个字段的值
-- 查询系统现在的时间 函数,内置函数SYSDATE() --
SELECT SYSDATE() FROM t_emps
-- 查询年龄段 --
-- substring截取substring(字段,第一个字符,长度) --
SELECT substring(SYSDATE(),1,4)- substring(ebirthday,1,4) FROM t_emps
-- 查询每个年龄段的员工的数量 ,FROM 表; FROM 临时结果集 --
SELECT count(age) ,age FROM (SELECT (substring(SYSDATE(),1,4)- substring(ebirthday,1,4)) age FROM t_emps) tmp GROUP BY age
步骤三:注明:这里连接数据库用到的sql语句如下
-- 创建t_emps表 --
CREATE TABLE t_emps(
eid INT PRIMARY KEY auto_increment, -- 员工的编号
ename VARCHAR(20) NOT NULL, -- 员工的姓名
epwd CHAR(8) NOT NULL, -- 员工的密码
ebirthday datetime, -- 员工的出生年月,不设计年龄字段,会造成字段冗余
esalary DOUBLE NOT NULL, -- 员工的工资
eaddress VARCHAR(100) -- 员工的地址
)
-- 插入数据 --
INSERT INTO t_emps(ename,epwd,ebirthday,esalary,eaddress,estate)
VALUES('赵五','11111','2000-05-28',90000.56,'南京',1);
INSERT INTO t_emps(ename,epwd,ebirthday,esalary,eaddress,estate)
VALUES('李六','22222','2004-06-15',88000.69,'盐城',1);
INSERT INTO t_emps(ename,epwd,ebirthday,esalary,eaddress,estate)
VALUES('李老八','22222','1996-12-30',5600,'无锡',1);
INSERT INTO t_emps(ename,epwd,ebirthday,esalary,eaddress,estate)
VALUES('赵二','22222','1996-12-30',5800,'无锡',0);
-- 查询表 --
SELECT * FROM t_emps
-- 查询表中信息数量 --
SELECT count(*) FROM t_emps
注:选中需要运行的sql语句,点击“运行已选择的”,完成sql语句的执行
4.连接数据库
步骤一:基本框架,初步建立数据库连接(进一步验证需要通过查询语句)
- 其中数据库名称(此处为mysql2025),以及用户名和密码,需要替换为自己的
package com.hy.chapter1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DBDao {
// 数据库连接对象,用于与数据库建立连接并执行操作
Connection conn;
public DBDao() {
try {
// 加载MySQL JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
// 数据库地址(本机3306端口,数据库名mysql2025)
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mysql2025",
"root", // 数据库用户名
"yourpassword" // 数据库密码
);
if (conn != null) {
System.out.println("数据库连接对象创建成功!");
}
} catch (ClassNotFoundException e) {
System.out.println("Mysql驱动加载失败");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("数据库连接失败");
e.printStackTrace();
}
}
public static void main(String[] args) {
DBDao dao = new DBDao();
}
}
输出结果:
数据库连接对象创建成功!
步骤二:进行数据库表的查询
package com.hy.chapter1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
public class DBDao {
// 数据库连接对象,用于与数据库建立连接并执行操作
static Connection conn;
public DBDao() {
try {
// 加载MySQL JDBC驱动
Class.forName("com.mysql.cj.jdbc.Driver");
// 建立数据库连接
// 数据库地址(本机3306端口,数据库名mysql2025)
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/mysql2025",
"root", // 数据库用户名
"yourpassword" // 数据库密码
);
if (conn != null) {
System.out.println("数据库连接对象创建成功!");
}
} catch (ClassNotFoundException e) {
System.out.println("Mysql驱动加载失败");
e.printStackTrace();
} catch (SQLException e) {
System.out.println("数据库连接失败");
e.printStackTrace();
}
}
public static void main(String[] args) {
DBDao dao = new DBDao();
// 第一个SQL:查询表的记录总数(用于初始化二维数组的行数)
String sql = "select count(*) from t_emps";
try {
// 创建PreparedStatement对象(用于执行SQL语句)
PreparedStatement pstmt = conn.prepareStatement(sql);
// 执行查询,返回结果集(ResultSet)
ResultSet rs = pstmt.executeQuery();
int count = 0; // 记录总数
while (rs.next()) { // 遍历结果集(此处只有一条记录,即总数)
count = rs.getInt(1); // 获取第一列的值(即count(*)的结果)
}
System.out.println("count为:" + count); // 打印记录总数
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 关闭数据库连接(避免资源泄漏)
if (null != conn) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
输出结果:
数据库连接对象创建成功!
count为:4