[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();

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6