数据库创建、增删改查、java连接数据库

数据库

1、数据库类型
1.1、MySQL【市面上大多数用的,开源】
1.2、Oracle【付费】
1.3、SQLServer【微软体系下的】
1.4、PGSQL
2、MySQL数据库安装
2.1、解压安装包
2.2、创建一个my.ini文件

拷贝一下内容,最好不要有中文

[mysqld]
# 设置3306端口
port=3306
# 自定义设置mysql的安装目录,即解压mysql压缩包的目录
basedir=D:\mysql\mysql-8.0.28-winx64
# 自定义设置mysql数据库的数据存放目录
datadir=D:\mysql\mysql-8.0.28-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数,这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
关键说明
注意事项
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
# 设置mysql客户端连接服务端时默认使用的端口和默认字符集
port=3306
default-character-set=utf8mb4
2.3、创初始化MySQL

管理员身份运行CMD -> 进入解压文件的bin目录 -> 执行:mysqld --initialize --console -> 创建好了root账号

2.4、安装MySQL服务

执行:mysqld --install

如果报错,就先执行一下:mysqld -remove mysql

2.5、启动MySQL

net start mysql 启动mysql服务

2.6、查看服务
2.7、安装后修改密码
2.7.1、管理员身份运行CMD
2.7.2、打开命令窗口cmd

输入命令:net stop mysql,停止MySQL服务

2.7.3、开启跳过密码验证登录的MySQL服务

输入命令 mysqld --console --skip-grant-tables --shared-memory

如果出现了不是外部也不是内部命令错误的话,请配置MySQL环境

2.7.4、再打开一个新的cmd

无密码登录MySQL,输入登录命令:mysql -u root -p 然后直接回车

2.7.5、密码置为空

命令如下:

use mysql

update user set authentication_string=‘’ where user=‘root’

2.7.6、退出mysql

执行命令: quit

2.7.7、关闭以-console --skip-grant-tables --shared-memory 启动的MySQL服务
2.7.8、打开命令框,输入:net start mysql 启动MySQL服务
2.7.9、步骤4密码已经置空,所以无密码状态登录MySQL,输入登录命令: mysql -u root -p 然后直接回车
2.7.10、正式修改密码
//ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
2.7.11、验证更改后密码正确登录

输入quit,退出当前登录,输入登录命令:mysql -u root -p

输入密码,成功登录,到此,重置密码结束

3、数据库增添改查
3.1、数据库创建
3.1.1、写法一
CREATE DATABASE person;
3.1.2、写法二
CREATE DATABASE if not exists person;
3.2、删除数据库(一定要记得备份)
3.2.1、写法一
DROP DATABASE person;
3.2.2、写法二(更狠)
DROP DATABASE if exists person;

3.3、进入数据库

use person;
3.4、创建表
CREATE TABLE person_info(
-- 语法:列名 数据类型[约束]
	id         int           PRIMARY key,
	name       varchar(20)   not null,
	age        int           not null,
	sex        char(1)       not null,
	birthday   datatime,
	remake     text
);
3.5、删除表
DROP TABLE IF EXISTS person_info;
3.6、表中添加数据
 insert into person_info(id,name,age,sex,birthday,remark)
 values(1,'张三',29,'男','1992-09-25','顺丰到付');
3.7、表中批量添加数据
insert into person_info(id,name,age,sex,birthday,remark)
values(1,'张三',29,'男','1992-09-25','顺丰到付'),
      (2,'李四',28,'男','1993-09-25','顺丰邮寄');
3.8、表中添加外键

在做多数据库环境,外键无法兼容,会造成各种数据传输的问题

4、MySql常用数据类型
5、SQL【脚本语言】

5.1、SQL常用的增删改查语句
-- 1、查询年级表的年级名称
--  语法:select 列名 from 表名
select GradeName from grade;
select grade.GradeName from grade;

-- 2、查询年级表的年级名称和年级编号
--  语法:
select GradeId,GradeNmae from grade;
-- 列名改名字
select GradeId as '年级编号',GradeName as '年级名称' from grade;
select GradeId '年级编号',GradeName '年级名称' from grade;
--  表名重命名+
select g.GradeId,g.GradeName from grade as g;

-- 3、查询课程表的编号,名称,课时
select SubjectId,SubjectName,ClassHour from `subject`;

-- 4、查询课程表所有的列
select * from `subject`;

-- 5、查询学生表的学生姓名和性别
select StudentNo,StudentName from student;

-- 6、查询学生表的学生姓名和性别并设置别名
select StudentName '姓名',Sex '性别' from student;

-- 7、查询学生表的学号,姓名,性别,电话,地址,邮箱并设置别名
select StudentNo'学号',StudentName'姓名',Sex'性别',Phone'电话',Address'地址',Email'邮箱' from student;
-- 分页查询
-- pagesize -> 页码
-- pageIndex-> 第几页
-- 下一页的开始索引=(pageIndex-1)*pagesize
select * from student;
-- 统计表里面有多少行
select count(*) from student;
-- 我想一共分7页,每页10条数据
select * from student limit 0,10;-- 第1页  0代表索引开始  10代表查询数据的条数
select * from student limit 10,10;-- 第2页  第8页没有数据,结果集为null
-- 分页第二种写法-
select * from student 10 OFFSET 0;

-- 8、查询姓名为白燕的学生信息
select * from student where StudentName='白燕';

-- 9、查询年级是S2的学生信息
select GradeId from grade where GradeName = 'S2';
select * from student where GradeId = 2;
-- 二句合并一句  子查询
-- 子查询:就是一个查询语句里面又包含了另一条查询语句【可以无限嵌套】
select * from student where GradeId = (select GradeId from grade where GradeName = 'S2');

-- 10、查询年级是Y2的男生信息
select * from student where Sex = '男' and GradeId = 3;

-- 11、 查询年级是Y2有一个叫王莉莉的女生
select * from student where
Sex = '女' 
and GradeId = (select GradeId  from grade where GradeName = 'Y2')
and StudentName = '王莉莉';

-- 12、 查询年级是S1住在天津市河西区的男生
select * from student where 
Sex = '男'
and GradeId = (select GradeId from grade where GradeName = 'S1')
and Address = '天津市河西区';

-- 13、 查询出生日期是1992年以后的学生
-- SQL语句条件运算符 > < = 
select * from student where BornDate > '1992-12-31';

-- 14、 查询出生日期是1992年之前的S1女生
select * from student where 
Sex = '女'
and GradeId = (select GradeId from grade where GradeName = 'S1')
and BornDate < '1992-01-01';

-- 15、 查询邮箱为空的学生信息
select * from student where Email is null;

-- 16、 查询邮箱为空地址是台州温岭的学生信息
select * from student where Email is null
and Address = '台州温岭';

-- 17、 查询有邮箱的学生信息
select * from student where Email is not null;

-- 18、 查询有邮箱并且是S2住在杭州临安的女生
select * from student where Email is not null
and Sex = '女'
and GradeId = (select GradeId from grade where GradeName = 'S2');

-- 19、 查询成绩在未及格的考试信息
select * from result where StudentResult < 60;

-- 20、 查询成绩在89分以上的信息
select * from result where StudentResult > 89;

-- 21、 查询成绩在95到100分之间的信息
select * from result where  StudentResult >= 95 and  StudentResult <= 100;

-- 22、 查询科目为“走进Java编程世界”并且成绩是90分及以上的信息
select * from result where  StudentResult >= 90 
and SubjectId = (select SubjectId from `subject` where SubjectName = '走进Java编程世界');

-- 23、 查询考试日期在2013-03-22到2013-11-15之间并且科目是“使用C#语言开发数据库应用系统”并且成绩在90到99分之间的信息
select * from result where 
ExamDate >= '2013-03-22' and ExamDate <= '2013-11-15'
and StudentResult >= 90 and StudentResult <= 99 
and SubjectId = (select SubjectId from `subject` where SubjectName = '使用C#语言开发数据库应用系统');

-- 24、 查询科目为“使用C#语言开发数据库应用系统”并且在85分以上的考试信息,按照从低到高排列
select * from result where StudentResult >= 85  ORDER BY StudentResult asc;
and SubjectId = (select SubjectId from `subject` where SubjectName = '使用C#语言开发数据库应用系统');

-- 25、 查询科目为“走进Java编程世界”的考试信息,按照从高到低排列
select * from result where SubjectId= (select SubjectId from `subject` where SubjectName = '走进Java编程世界')
ORDER BY StudentResult desc;

-- 26、 查询未及格的学生姓名(S2子查询)
select StudentName from student where GradeId = (select GradeId from grade where GradeName = 'S2')
and StudentNo = (select StudentNo from result where StudentResult < 60);

-- 27、查询住址为“山东”的学生姓名、电话、住址
select StudentName,Phone,Address from student where Address like '%山东%';

-- 28、查询名称中含有“数据库”字样科目信息(3条)
select * from `subject` where SubjectName like '%数据库%';

-- 29、查询电话中以“180”开头的学生信息
select * from student where Phone like '180%';

-- 30、查询姓姜的,单名的学生信息
select * from student where StudentName like '姜_';

-- 31、查询课程名称包含java的课程信息 
select * from `subject` where SubjectName like '%java%';

-- 32、查询课程名称包含“c“并且课时在69以上的课程信息
select * from `subject` where SubjectName like '%c%';
and ClassHour > 69);

-- 33、查询Y2课程中课时65以上并且课程名称包含“企业”两个字的课程信息
select * from `subject` where SubjectName like '%企业%'
and ClassHour > 65
and GradeId = (select GradeId from grade where GradeName = 'Y2');

-- 34、查询学生姓名包含“燕”的学生信息
select * from student where StudentName like '%燕%';

-- 35、查询学生姓名以“张”开头的学生信息
select * from student where StudentName like '张%';

-- 36、查询学生姓名以“丽”结尾的学生信息
select * from student where StudentName like '%丽';

-- 37、查询地址包含“北京”的学生信息
select * from student where Address like '%北京%';

-- 38、查询地址包含“台州”并且1995年出生的Y2男生信息(方振)
select * from student where Address like '%台州%';
and GradeId = (select GradeId from grade where GradeId = 'Y2')
and BornDate >= '1995-01-01'
and BornDate <= '1995-12-31';

-- 39、查询电话号码以“135”开头的,并且姓名是两个字的,故乡河北省的S1女生信息
select * from student where Phone like '135%'
and StudentName like '__';
and Address like '河北省%'
and  GradeId = (select GradeId from grade where GradeId = 'S1');

-- 40、查询姓名是3个字的,并且以王字开头的,并且生日在1991年到1996年范围之间的,并且是Y2住在湖州的女生信息 (王莉莉)
select * from student where StudentName like '王__'
and BornDate >= '1991-01-01'
and BornDate <= '1996-12-31'
and Address like '湖州%';
and GradeId = (select GradeId from grade where GradeId = 'Y2');

-- 41、查询没有邮箱并且姓名是3个字的,并且姓名中间那个字是“国”的Y2男生
select * from student where Email is  null
and StudentName like '_国_';
and Sex = '男'
and  GradeId = (select GradeId from grade where GradeId = 'Y2');

-- 42、查询有邮箱并且地址以“河”开头,中间4个字为任意字符,第5个字是“庄”的学生信息
select * from student where Email is not null
and Address like '河____庄%'; 

-- 43、查询学员为(S1201302001,S2102009,S2102004,S2102006)这4位学生的考试成绩信息,按照成绩从高到低排列
select * from result where StudentNo in('S1201302001','S2102009;','S2102004','S2102006')ORDER BY StudentResult desc;

-- 升序asc 降序dec
select * from result where StudentNo in('S1201302001','S2102009','S2102004','S2102006') ORDER BY StudentResult asc;

-- 44、查询姓名为“凌洋“的“HTML和CSS网页技术“考试成绩
select StudentResult from result where 
SubjectId = ( select SubjectId from `subject` where SubjectName = 'HTML和CSS网页技术')
and StudentNo = ( select StudentNo from student where StudentName = '凌洋');

-- 45、查询课程表的课程名称,要求把java单词替换为大写的
select UPPER(`subject`.SubjectName = 'java') from `subject`;
5.2、联表
5.2.1、内连接
use basedate;
-- 查询QQ号码为88662753的用户的所有好友信息
-- qquser主表 relaton子表
select * from baseinfo b,relation r
where r.QQID = '88662753'
and r.RelationStatus = 0
and r.RelationQQID = b.QQID;

-- 查询学生姓名,年级名称
-- 写法一:自然拼接,老式写法
select s.StudentNo,s.StudentName,g.GradeName,g.GradeId from student s,grade g-- 多张表里有的列一定要指明是哪张表里面的列
-- 重复数据 因为它是row * row(student表里的row * grade表里的row 
-- 解决方案
where s.GradeId = g.GradeId;
-- 写法二:官方推荐,SQL98版本新推出的语法
-- 写SQL是做脚本
select * from student inner join grade -- inner关键字可以去掉
on (student.GradeId = grade.GradeId);

-- 分析: 姓名再student表, 年级名称grade表    =》 联表查询-
-- 3表可以,4表也可以,。。。。。无限

-- 查询课时在 60 到 70 之间的课程名称,年级名称
select s.SubjectName,g.GradeName from `subject` s,grade g
where ClassHour BETWEEN 60 and 70;
select s.SubjectName,g.GradeName from `subject` s 
inner join grade g
on (s.GradeId = g.GradeId)
where s.ClassHour BETWEEN 60 and 70;

-- 查询考试成绩,学号,学生姓名
select s.StudentNo,s.StudentName,r.StudentResult from student s inner join result r
on (s.StudentNo = r.StudentNo);

-- 查询考试成绩未及格的女生学号,姓名,成绩,科目名称,年级名称(要联4张表
select* from result r
inner join student   s   on (r.StudentNo = s.StudentNo)
inner join grade     g   on (g.GradeId = s.GradeId)
inner join `subject` sub on (g.GradeId = sub.GradeId)
where r.StudentResult < 60 and Sex = '女';

-- 查询课程名称为:HTML 和CSS网页技术, 成绩在 90 分及以上,住址在湖北省幵且年龄在20-35 岁之间的男生。显示该学生的姓名,地址,年龄,考试成绩
SELECT
	s.StudentName as '姓名',
	s.Address as '地址',
	TIMESTAMPDIFF( YEAR,s.BornDate,now( ) ) AS '年龄',
	r.StudentResult as '地址'
FROM
	result r
	INNER JOIN student s ON ( r.StudentNo = s.StudentNo )
	INNER JOIN `subject` sub ON ( r.SubjectId = sub.SubjectId ) 
WHERE
	s.Address LIKE '湖北省%' 
	AND r.StudentResult >= 90 
	AND s.Sex = '男生' 
	AND sub.SubjectName = 'HTML和CSS网页技术' 
	AND TIMESTAMPDIFF( YEAR, s.BornDate, now( ) )  BETWEEN 20 AND 30;
  • 三表连接

    -- 八十三、 查询 QQ 号码为 54789625 的好友中等级为 10 级以上的“月亮”级用户信息。
    -- a) 需要用到:三表连接查询
    select * from baseinfo b
    inner join relation r on (b.QQID = r.RelationQQID) and r.QQID = ' 54789625' and r.RelationStatus = 0
    inner join qquser q on ( r.RelationQQID = q.QQID) and q.`Level` > 10 ;
    
5.2.2、外连接
  • 左外接

    -- 查询从未考过试的学生信息(分析:学生没有在成绩表中,就代表没有考过试)
    -- 外连接(参考表为A(学生表),子表B(成绩表)
    -- 查询结果:A在B没有的数据,进行NULL填充
    -- 左外联接
    select * from student
    left outer join result on (result.StudentNo = student.StudentNo)
    where result.Id is null;
    
  • 右外接

    -- 查询考过试的学生信息 
    -- 主表(成绩表),子表(学生表)
    -- 成绩表在学生表没有的数据
    -- 右外联接
    select * from student
    right outer join result on ( result.StudentNo = student.StudentNo);
    
    
  • 全连接

    -- 全连接
    select StudentNo from student 
    UNION 
    select StudentNo from result;
    
5.2.3、联表查询
use basedate;
-- 查询QQ号码为88662753的用户的所有好友信息
-- qquser主表 relaton子表
select * from baseinfo b,relation r
where r.QQID = '88662753'
and r.RelationStatus = 0
and r.RelationQQID = b.QQID;

-- 查询当前在线用户的信息
select * from baseinfo b
inner join qquser q on ( b.QQID = q.QQID)
where `OnLine` = '0';

-- 查询北京的、年龄在18至45岁之间的在线用户的信息。
select * from baseinfo b
inner join qquser q on ( b.QQID = q.QQID)
where Age BETWEEN 18 and 45
and `OnLine` = 0
and Province like '北京%';

select b.NickName as 昵称,q.QQID as QQ号,r.RelationStatus as 黑名单 from baseinfo b
inner join qquser q on ( b.QQID = q.QQID ) where q.QQID = '286214'
inner join relation r on ( q.QQID = r.RelationQQID ) where r.RelationStatus = 1;

-- 查询昵称为“小笨猪”的用户信息。
select * from baseinfo 
where NickName = '小笨猪';

-- 查询QQ号码为54789625的用户的好友中每个省份的总人数,并且总人数按由大到小排序。
select b.Province as 省份,count(1) as 总人数 from baseinfo b
inner join relation r on  (b.QQID = r.RelationQQID)
where r.QQID = '54789625'
GROUP BY b.Province
ORDER BY count(1) desc;


-- 查询至少有150天未登录QQ帐号的用户信息。
select * from baseinfo b
inner join qquser q on ( b.QQID = q.QQID)
where TIMESTAMPDIFF(day,lastLogTime,now()) > 150;

-- 查询QQ号码为54789625的好友中等级为10级以上的“月亮”级用户信息。
select * from baseinfo b
inner join qquser q on ( b.QQID = q.QQID )
inner join relation r on ( r.RelationQQID = b.QQID )
where q.Level >= 10
and r.RelationStatus = 0
and r.QQID = '54789625';

-- 查询QQ号码为54789625的好友中隐身的用户信息。
select * from baseinfo b
inner join relation r on (b.QQID = r.RelationQQID) and r.RelationStatus = 0 and r.QQID = '54789625'
inner join qquser q on (q.QQID = r.RelationQQID) where q.`OnLine` = 2;

-- 查询好友超过20个的用户信息。
select QQID as QQ号,count(1) as 总人数 from relation r
where r.RelationStatus= 0
GROUP BY QQID
HAVING count(1) > 20;

-- 为了查看信誉度,管理员需要查询被当做黑名单人物排名前20的最低信誉度用户。
select RelationQQID as QQ号,count(1) as 被黑名单 from relation r
where r.RelationStatus = 1
GROUP BY RelationQQID
ORDER BY count(1) desc;

-- 七十八、 查询 QQ 号码为 ,包括 QQ 号码,昵称,年龄
select QQID,NickName,Age from baseinfo;

-- 七十九、 查询当前在线用户信息
-- a) 查询北京市、年龄在 18-45 岁之间在线的用户信息
select * from baseinfo b
inner join qquser q on (b.QQID = q.QQID) and q.`OnLine` = 0
where b.Province like '%北京%'
and b.Age BETWEEN 18 and 45;

-- 八十、 查询昵称为“小笨猪”的用户信息
select * from baseinfo b
where b.NickName = '小笨猪';

--八十一、 查询 QQ 号码为 54789625 的用户的好友中 ,幵且按总人数升序
-- a) 需要用到:分组,聚合函数,降序排序
-- b) 关系:on(Relation.RelationQQID=BaseInfo.QQID)
select b.QQID as QQ号,count(1) as 总人数 from baseinfo b 
inner join relation r on (b.QQID = r.RelationQQID) and r.QQID='54789625'
where r.RelationStatus = 0
GROUP BY b.QQID
ORDER BY count(1) desc;

-- 八十二、 查询至少有 2300 天未登录的 QQ 账户信息,包括 QQ 号码,最后一次登录时间、等级、昵称、年纪
select b.QQID,q.lastLogTime,q.Level,b.NickName,b.Age from baseinfo b,qquser q
where TIMESTAMPDIFF(day,q.lastLogTime,now()) >= 2300;

-- 八十三、 查询 QQ 号码为 54789625 的好友中等级为 10 级以上的“月亮”级用户信息。
-- a) 需要用到:三表连接查询
select * from baseinfo b
inner join relation r on (b.QQID = r.RelationQQID) and r.QQID = ' 54789625' and r.RelationStatus = 0
inner join qquser q on ( r.RelationQQID = q.QQID) and q.`Level` > 10 ;

-- 八十四、 查询 QQ 号码为 54789625 的好友中 的用户信息
select * from baseinfo b
inner join relation r on ( b.QQID = r.RelationQQID) and r.QQID = '54789625';
5.7.4、联表删除

                
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java连接数据库可以使用JDBC(Java Database Connectivity)技术来实现增删改查操作。 首先,需要引入Java的JDBC驱动程序,例如MySQL的驱动可以通过在项目中导入相应的JAR包来完成。 接下来,需要创建数据库连接。可以使用Connection对象来表示数据库连接。使用DriverManager的getConnection()方法来获取数据库连接,方法参数包括数据库的URL、用户名和密码等。 连接成功后,可以创建Statement或者PreparedStatement对象来执行SQL语句。 实现增加数据操作时,可以使用INSERT INTO语句,例如: String sql = "INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...)"; Statement statement = connection.createStatement(); statement.executeUpdate(sql); 实现删除数据操作时,可以使用DELETE语句,例如: String sql = "DELETE FROM table_name WHERE condition"; Statement statement = connection.createStatement(); statement.executeUpdate(sql); 实现修改数据操作时,可以使用UPDATE语句,例如: String sql = "UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition"; Statement statement = connection.createStatement(); statement.executeUpdate(sql); 实现查询数据操作时,可以使用SELECT语句,例如: String sql = "SELECT * FROM table_name"; Statement statement = connection.createStatement(); ResultSet resultSet = statement.executeQuery(sql); while (resultSet.next()) { // 处理查询结果 } 完成操作后,需要及时关闭数据库连接和释放资源,可以使用close()方法来完成,例如: resultSet.close(); statement.close(); connection.close(); 通过以上步骤,可以使用Java连接数据库实现数据库增删改查功能。注意在操作数据库时需谨慎处理SQL语句,以避免SQL注入等安全问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值