[java拓展]Mysql数据库的基础指令,和JDBC的使用
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
1.关于mysql数据库
1概述
DBMS数据库管理系统用来管理数据库执行sql语句的东西Mysqloraclesqlite这些严格来说不是数据库而是数据库管理系统其中Mysql最常用而且最重要的是它免费
MYsql的下载方法自行查阅官网建议使用msi的下载方式zip的下载方式需要配置很多东西
另外 mysql默认占据的端口应该都是3306这一点会在后面提到
db数据库存储数据一般是db文件数据库/表/字段大概就是这个逻辑
字段就是column
数据就是row
2可视化工具Navicat的下载
可视化工具navicat是一种方便进行数据库操作的可视化工具这年头谁想不开啊天天写sql。。。不过这个东西的使用方式很折磨人这里提供两种使用方式对应Navicat 15版本
1.第一种就是简单改一下注册表原理相当于每次都重新下载方法为
命令窗口输入regedit进入注册表页面
然后按照USER--->SoftWare--->PremiumSoft这个文件夹下面就是navicat软件的注册信息把这些删掉就能重置日期
弊端就是每次创建的链接都无法保存
第二种方法
诺就长这样的一个小东西
在使用注册机的时候要注意几个问题
1.这个exe文件必须和你下载完的navicat.exe存在于同一个路径内方便进行patch
2.在操作的时候记得一定不要打开navicat如果打开过了按照上面说的方法把注册表信息删除掉。先进入注册机页面点击patch获取版本以后再进行各种操作
3.在操作过程中记得断网
这方法还是有点问题的。。。反正我是成功了捏D
3基础指令
基础指令要记住的一个东西没啥办法就要记住
DQL数据库查询语言select
DML数据库管理语言数据的增删改 insert delete update
DDL数据库结构语言表结构的增删改create drop alter
TCL数据库事物管理语言commit rollback
DCL权限控制语言grant授权 revoke撤销权限
基本的操作语言后续会补充
1.数据库的操作
use databasename;//使用/切换到某某数据库
show xx;//展示数据库/表
exit 退出
create xx//创建表/数据库
2.查询语句中常用的
select * from table从数据库中查询所有字段
select a,b form table 从数据库中查询ab两个字段
select a*10 from table 数据库中查询a字段并且将返回结果✖10
select a as unbbr from table / select a 'unbbr' from table; 从数据库里面查询a字段并且把a字段显示为unbbr
条件查询 关键字where里面有很多逻辑符号
select * from table where id =1 从数据库中查询所有字段里面 id字段为1的数据
select * from table where id between 1 to 10 从数据库里面查询id为1到10之间的数据
select * from table where id is null/is not null 从数据库里查询id为空或者id不是空的数据
select * from table where id in 123/ not in 123 从数据库里查询id为123或者id不是123其中一个的数据
模糊查询 关键词like 类似正则匹配%代表任意个字符 _代表某个字符
select * from table whiere id like '%3' 查询数据库中id末尾数字为3的数据
查询结果排序
select * from table order by id ascname desc先按id升序的顺序排列如果id相等就按name降序排列
一般默认是按升序排列的asc强制升序desc强制降序
上述的综合应用select * from human where name > 1 order by id desc;查找所有名字大于一按id降序进行排列
2.关于JDBC
1概述
jdbcjava database controljava数据库控制我记得应该是这个的缩写。。。还是connection来着是java的一个API库用来完成java和数据库的对接。
注意一个问题在使用jdbc的时候首先要导入一个jar包这个jar包在mysql的官网应该是可以下载到的MySQL :: Download Connector/J
解压以后找到文件里面的jar包即可其他的不用管建一个文件夹扔到你的项目里
然后右键jar包点击add as library然后选择起作用的范围即可
2五个主要实现功能的接口/类以及对应的函数
//jdbcAPI主要的知识点其实就五个
//DriverManager
//Connection
//Statement
//PreparedStatement 预处理sql执行对象
//ResultSet 结果处理集
DriverManager驱动管理类这个东西的作用有两个注册驱动和创建连接对象
//注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//这个注册驱动已经被class类解决掉了深入了解请看反射
//这里只要简单声明一下就可以了
//创建链接 协议地址端口号数据库名字
//下面这个也是链接你本机的Mysql的方式
String url="jdbc:mysql://127.0.0.1:3306/textsql(1)";
String username="root";
String password="123456";
Connection conn= DriverManager.getConnection(url,username,password);
connection作用1生成执行对象作用2控制TCL
注意一下commit的提交时间应该是在statement执行对象执行完sql语句以后再进行提交这个后面学到TCL的时候再回来补充原理现在还不太懂
//connection对象有两个功能一个是生成sql执行对象另一个是负责事务管理就是TCL语言
//事务管理主要就是管理提交和commit和rollback除此之外因为mysql是自动提交的
conn.setAutoCommit(false);//我们可以手动设置不自动提交
//那么下面就要在执行完sql语句以后进行提交
conn.commit();//如果关闭了就要手动开启事务事务提交在sql语句执行后
//如果开启了自动执行那么就是在sql执行对象执行完sql语句后自动把当前事务进行提交
conn.rollback();//这一步的效果就是原本改完的事件又回滚回去了
statement对象用来执行sql语句
//第三步sql执行对象
Statement stat=conn.createStatement();
//sql执行对象一共有三种
//第四步准备sql语句
String sql_dql="select * form human";
String sql_DML="update human set name = 1245 where id = 1";
//第五步执行sql语句
int count=stat.executeUpdate(sql_DML);//这里显示的是处理了几条数据
//sql执行对象根据执行语言的不同返回不一样的东西执行DML和DDL返回的是数字代表处理的数
//执行DQL返回的是一个resultSet对象需要我们进一步手动处理
不过这样的话不防止sql注入的情况sql注入大致就是这个东西
String sql1="select * from human where id="+"userid"+" and name="+"username";
//这个sql语句想要表达的就是查询是否有idname符合输入的userid和username的情况
//里面的逻辑控制控制为 id=userid and name=username就能正常登入查到数据
//比如说我们输入的东西userid是jntmusername为ikun
//生成的sql语句就是这样的
// select * from human where id='jntm' and name = 'ikun';
//虽然这样仍然是没啥问题但是比如说我们要在username的位置输入一个 (' or '1'='1)
//sql语句就会变成
// select * from human where id='jntm' and name = '' or '1'='1';
//这样无论如何都能成功查询出所有数据了
//所以说为了防止这种sql攻击我们不能把输入和原本的sql语句一起编译
//先把sql语句的框架确定下来输入的东西统统视为字符串就能防止注入了
为了防止sql注入我们使用PreparedStatement对象来替代Statement对象
//正常的statementsql提交对象应该是先完成sql拼接然后执行提交
//PreparedStatement应该是先临时编译一下sql语句等待预留位置填满以后再进行提交
//简单演示一下这玩意的用法
Class.forName("com.mysql.cj.jdbc.Driver");
Connection conn= DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/textsql(1)","root","123456");
String sql2="select * from human where id= ? and name= ?";
//防止sql注入的方法是对敏感字符进行转义处理真正意义上变成一段字符串
PreparedStatement ps=conn.prepareStatement(sql2);//先进行预处理
ps.setInt(1,2);//第一个问号那里为 整数 2
ps.setInt(2,3);//第二个问号那里为 整数 3
ResultSet r=ps.executeQuery();//这里就不用写sql语句了因为已经注入了
//最后记得关闭资源
最后一个关于DQL语句的查询结果我们一般使用ResultSet接受这个对象接收回来以后可以理解为存了一个矩阵
里面内置了两个方法1.next迭代器方法 2getXxx字段序号/字段名称
next指向行get方法指向列行列同时定位数据可以这样理解
ResultSet resultSet=stat.executeQuery("select * from human");
while(resultSet.next()){
int name=resultSet.getInt(1);
int id =resultSet.getInt("id");//这个方法是重载的可以是字段名字也可以是字段序号
String sex=resultSet.getString(3);
int address =resultSet.getInt(4);
System.out.println(name+"-"+id+"-"+sex+"-"+address);
}
3具体的连接步骤
这里直接上完整的代码算了
//第一步注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//第二步创建链接 协议地址端口号数据库名字
String url="jdbc:mysql://127.0.0.1:3306/textsql(1)";
String username="root";
String password="123456";
Connection conn= DriverManager.getConnection(url,username,password);
conn.setAutoCommit(false);//我们可以手动设置不自动提交
//那么下面就要在执行完sql语句以后进行提交很重要
//第三步sql执行对象
Statement stat=conn.createStatement();
//sql执行对象一共有三种这里用最简单的
//第四步准备sql语句
String sql_dql="select * form human";
String sql_DML="update human set name = 1245 where id = 1";
//第五步执行sql语句
int count=stat.executeUpdate(sql_DML);//这里显示的是处理了几条数据
//sql执行对象根据执行语言的不同返回不一样的东西执行DML和DDL返回的是数字代表处理的数目
//执行DQL返回的是一个resultSet对象需要我们进一步手动处理
conn.commit();//如果关闭了就要手动开启事务事务提交在sql语句执行后
//如果开启了自动执行那么就是在sql执行对象执行完sql语句后自动把当前事务进行提交
conn.rollback();//这一步的效果就是原本改完的事件又回滚回去了
//第六步返回对象
//第七步释放资源
stat.close();
conn.close();