[java拓展]Mysql数据库的基础指令,和JDBC的使用

news2024/11/18 9:42:33

1.关于mysql数据库

(1)概述

DBMS数据库管理系统,用来管理数据库,执行sql语句的东西,Mysql,oracle,sqlite这些严格来说不是数据库而是数据库管理系统,其中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 (1,2,3)/ not in (1,2,3)   从数据库里查询id为1,2,3或者id不是1,2,3其中一个的数据
模糊查询 关键词like 类似正则匹配,%代表任意个字符 _代表某个字符
select * from table whiere id like '%3'  查询数据库中,id末尾数字为3的数据

查询结果排序
select * from table order by id asc,name desc;先按id升序的顺序排列,如果id相等,就按name降序排列
一般默认是按升序排列的(asc强制升序,desc强制降序)
上述的综合应用select * from human where name > 1 order by id desc;查找所有名字大于一,按id降序进行排列

2.关于JDBC

(1)概述

jdbc:java database control(java数据库控制,我记得应该是这个的缩写。。。还是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语句想要表达的就是查询是否有id,name符合输入的userid和username的情况
        //里面的逻辑控制控制为  id=userid and name=username,就能正常登入(查到数据);
        //比如说我们输入的东西userid是jntm,username为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()迭代器方法  2,getXxx(字段序号)/(字段名称)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163842.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

马来酰亚胺聚乙二醇硅烷,MAL-PEG-Silane 结构,科研试剂溶于大部分有机溶剂

马来酰亚胺聚乙二醇硅烷,MAL-PEG-Silane 中文名称:马来酰亚胺聚乙二醇硅烷 分子量:1k,2k,3.4k,5k,10k,20k。。。 存储条件:-20C,避光,避湿 用…

剑指offer----C语言版----第十九天----面试题25:合并两个有序的链表

目录 1. 合并两个排序的链表 1.1 题目描述 1.2 解题思路 1.3 往期回顾 1. 合并两个排序的链表 原题链接:21. 合并两个有序链表 - 力扣(LeetCode)1.1 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个…

new-Crack:StarUML 5.1.0 -2023

StarUML 用于敏捷和简洁建模的复杂软件建模器 当前版本:v5.1.0 主要特征 通用语言2 兼容 UML 2.x 标准元模型和图表:类、对象、用例、组件、部署、复合结构、序列、通信、状态图、活动、时间、交互溢出、信息流和剖面图。 SYSML 支持 支持使用 SysML 图…

SSM03_SpringMVC REST风格 SSM整合

01-SpringMVC简介SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装。SpringMVC是处于Web层的框架,所以其主要的作用就是用来接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前端,所…

【iHooya】1月14日寒假集训课作业解析

内部元素之和 输入一个整数矩阵&#xff0c;计算位于矩阵内部的元素之和。所谓矩阵内部的元素&#xff0c;不在第一行和最后一行的元素以及第一列和最后一列的元素。 输入 第一行分别为矩阵的行数m和列数n&#xff08;m < 100&#xff0c;n < 100&#xff09;&#xff0…

Arthas 入门到实战(一)快速入门

Arthas官方文档指出&#xff1a; 介绍&#xff1a;Arthas 是一款线上监控诊断产品&#xff0c;通过全局视角实时查看应用 load、内存、gc、线程的状态信息&#xff0c;并能在不修改应用代码的情况下&#xff0c;对业务问题进行诊断&#xff0c;包括查看方法调用的出入参、异常&…

人工智能与游戏

游戏是智能应用最好的平台&#xff0c;可惜的是&#xff1a;只用了少部分计算AI&#xff0c;还没有用到智能的计算计1 引言从1950年香农教授提出为计算机象棋博弈编写程序开始&#xff0c;游戏人工智能就是人工智能技术研究的前沿&#xff0c;被誉为人工智能界的“果蝇”&#…

微信小程序070校园食堂订餐多商家带配送

基于微信小程序食堂订餐管理系 系统分为用户和管理员&#xff0c;商家三个角色 用户小程序端的主要功能有&#xff1a; 1.用户注册和登陆小程序 2.查看系统新闻资讯公告 3.用户查看小程序端的菜品信息&#xff0c;在线搜索菜品&#xff0c; 4.用户查看菜品详情&#xff0c;收…

数据结构-二叉搜索树解析和实现

1.含义规则特性二叉搜索树也叫排序二叉树、有序二叉树&#xff0c;为什么这么叫呢&#xff1f;名字由来是什么&#xff1f;主要是它的规则图一规则一&#xff0c;左子树的所有节点的值均小于它的根节点的值规则二&#xff0c;右子树的所有节点的值均大于它的根节点的值&#xf…

摇头测距小车01_舵机和超声波代码封装

目录 一、摇头测距小车图片演示 二、接线方式 三、代码实现 一、摇头测距小车图片演示 就是在小车原有的基础上&#xff0c;在小车前面加一个舵机和一个超声波&#xff0c;把超声波粘在舵机上 二、接线方式 1、超声波接线 VCC-----上官一号5V GND----上官一号GND Trig----…

.net开发安卓入门-Dialog

.net开发安卓入门-DialogAndroid.App.AlertDialog运行效果代码UI源码引入 下面这个类库才可以使用Java.Interop.Export特性绑定事件Android.App.AlertDialog https://learn.microsoft.com/zh-cn/dotnet/api/android.app.alertdialog?viewxamarin-android-sdk-13 SetTitle &…

nodejs+vue摄影跟拍预定管理系统

&#xff0c;本系统分为用户&#xff0c;摄影师&#xff0c;管理员三个角色&#xff0c;用户可以注册登陆系统&#xff0c;查看摄影套餐&#xff0c;预约套餐&#xff0c;购买摄影周边商品&#xff0c;查看跟拍照片等。摄影师可以对用户的摄影预约审核&#xff0c;跟拍流程管理…

【Java集合】ArrayList自动扩容机制分析

目录 先从 ArrayList 的构造函数说起 一步一步分析 ArrayList 扩容机制 先来看 add 方法 再来看看 ensureCapacityInternal() 方法 ensureExplicitCapacity()和calculateCapacity方法 下面我们接着来看grow() 方法 再来看一下grow()中调用的hugeCapacity() 方法 System.arrayco…

3、代码注释与编码规范

目录 一、代码注释 &#xff08;1&#xff09;单行注释 &#xff08;2&#xff09;多行注释 &#xff08;3&#xff09;文档注释 2. 编码规范 一、代码注释 &#xff08;1&#xff09;单行注释 “//”为单行注释标记&#xff0c;从符号“//”开始直到换行为止的所有内容…

3D立体字生成器【免费在线工具】

Text2STL是一个可以在线使用的免费的3D立体字生成工具&#xff0c;输入文字内容即可实时预览生成的3D立体字模型&#xff0c;还可以导出为STL模型用于3D打印&#xff1a; 3D立体字生成器访问地址&#xff1a; http://text2stl.bimant.com/zh-cn/generator 1、3D立体字生成风…

【零基础】学python数据结构与算法笔记11

文章目录前言65.树的概念66.树的实例&#xff1a;模拟文件系统67.二叉树的概念68.二叉树的遍历69.二叉搜索树的概念。70.二叉搜索树&#xff1a;插入71.二叉搜索树&#xff1a;查询72.二叉搜索树&#xff1a;删除73.二叉搜索树&#xff1a;删除实现总结前言 学习python数据结构…

中本聪是个贪婪的矿工吗?

对可能是中本聪的实体所表现出的挖矿行为的技术分析。文 | Jameson Lopp. 原标题&#xff1a;Was Satoshi a Greedy Miner?. 2022/9/16.* * *如果你在加密生态系统中待了足够久的时间&#xff0c;那么你无疑会听到这样的论点&#xff0c;即某些项目的代币分配不公平&#xff0…

Windous注册表+c#操作

下面将会分享注册表的基础知识及C# 读写注册表的方法 了解注册表 注册表&#xff08;英语&#xff1a;Registry&#xff0c;中国大陆译作注册表&#xff0c;台湾、港、澳译作登录档&#xff09;是Microsoft Windows操作系统和其应用程序中的一个重要的层次型数据库&#xff0…

关于计算机网络,你需要知道的一些常识

最近闲着没啥事翻开之前大学时候谢希仁老师第7版的《计算机网络》这本书,结果发现了一些之前没有发现的常识。 首先是互联网与互连网的区别,一般我们常说的互联网是Internet,是指因特网,其起源于阿帕网ARPANT。或许很多读者看到这里就觉得有什么秘密可言,不都是常识了吗?看你大…

如何在Vue3+js项目(脚手架)中使用(下载安装及运行)element-plus以及解决使用过程中遇到的问题

文章目录 &#x1f4cb;前言 &#x1f3af;关于 ElementUI 框架描述 &#x1f9e9;设计原则 1️⃣一致 Consistency 2️⃣反馈 Feedback 3️⃣效率 Efficiency 4️⃣可控 Controllability &#x1f9e9;环境支持 &#x1f3af;安装element-plus &#x1f9e9;遇到的问…