| |
|
![image]()
![image]()
【】交互的过程:前端<-->后端<-->数据库
以输入账户密码登录为例,客户端输入账号密码传到服务器端,服务器对账号密码进行逻辑判断,能否登录需要看是否有对应的账号密码,他们存放在数据库。数据库将结果返回服务器,服务器校验后,将结果相应到客户端。
【】前端:客户端,浏览器等应用程序,
【】后端:服务器端,做业务处理
【】数据库:
|
|
![image]()
![image]()
|
|
【】安装:目前只安装服务器部分server only,密码用root,其余默认下一步。
【】验证:我的电脑--管理--服务和应用程序--mysql80,是否存在
![image]()
|
|
对mysql进行操作
【】dos命令行:输入数据库所在ip,(端口号),账号,密码,登录使用
![image]()
【】图形化界面操作navicat
|
![image]() |
|
![image]()
![image]()
|
|
![image]()
![image]()
【】sql是一种语言,是用来下命令的
![image]()
【】表,和excel表格一样,表是记录,列是字段,
![image]()
【】创建数据库
![image]()
![image]()
【】创建表
查询选项卡--新建查询--输入sql语句create table t_book( )-------------t表_book
先字段名,再写数据类型int double varchar()字符串类型小括号内字符多少
之后选中语句,点击“运行已选择的”,然后就能建立一个表了,在左侧
【】保存输入语句:ctrl+s,然后命名,之后会保存在左侧查询中
创建表 书籍表 create table t_book( id int, name varchar(30), author varchar(10), price double )
![image]()
|
|
【】查询数据
select*from t_book
选中语句,点击运行已选中
|
![image]() |
| 【】注释两条杠后面空格-- , |
|
-- 增加(插入) insert into t_book(id,name,author,price) value(1,'零基础学java','马士兵',89.45); insert into t_book(id,name,author,price) value(2,'活着','余华',89.11);
插入表格字段值为
|
|
-- 删除 delete from t_book where id=2;
删除表格,条件是
通过where加筛选条件,删除id=2的那几条数据
|
|
-- 修改 update t_book set price=12 where id=1;
更新表格,设置字段为,条件是
|
|
-- 查看 select*from t_book; 查看所有字段从表格 select name,price from t_book; 查看name,price字段从表格 select * from t_book where price>30; 查看所有字段从表格该行price》30
where确定行,
|
|
![image]()
![image]()
【】jdbc就是j和db实现c连接,java语言和database数据库的连接规范
【】mysql对jdbc的实现就叫做mysql驱动,有了这套驱动java就能连接相应的数据库
|
|
![image]()
【】首先下载相关jar包,在idea项目下建立模块,然后在模块下新建文件夹命名为lib,把jar包复制到lib文件夹下面,右击jar包,选择add as library,就可以使用了
![image]()
【】加载驱动
![image]()
![image]()
url=mysql协议,ip(数据库所在机器的ip,因为采用本机ip,可以替换为localhost):数据库端口号,数据库名(本课程创建的是msb)
String url="jdbc:mysql://192.168.144.164:3306/msb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
|
| alt+enter再回车就能把异常抛出去 |
|
【】就像打电话:
加载驱动--准备一台电话
输入信息获取链接--输入电话号
创建会话java开始接通数据库--拨通电话
发送sql语句---通话下达要求
处理结果----获悉处理结果
关闭资源--挂电话
![image]()
|
|
【】插入。删除、修改,都属于对数据表的跟新,都可以直接输入对应的sql语句,但是查询不能使用跟新函数
![image]()
|
|
【】查询操作,在发送语句和结果上有不同
![image]()
![image]()
【】ResultSet可以理解为一个结果集合,包含所有数据,数据库表里面有三条记录,这个结果集合里面就有三条记录 //可以理解为rs指向一个数据集,数据集里面有一行一行的数据
【】next方法
可以理解为有一个指针指向数据表,可以通过next方法对指针进行操作,next调用时会判断指针下面有没有对应的记录,有记录会把记录里面的内容做一个输出。同时,next方法一调用,指针就会做一个下一操作。如果用一个循环来配合,就可以对里面数据做一个迭代
rs.next返回布尔值,是否有下一条记录存在。有的话可以做一个输出。
|
| |
|
![image]()
现实中一般用数据库储存信息,学了jdbc就能在java程序中连接数据库了。
![image]()
|
|
【】查询书籍功能
1由于要使用数据库,需要连接数据库的几个步骤,所以把连接数据库做成一个函数,
加static可以直接调用,不需要先创建对象。哪怕主函数并行函数,没有static也需要先建立本类再调用函数
2将数据库连接六部复制过来,驱动--连接信息--创建会话--发送sql语句(执行查询的语句)--处理结果()--关闭资源
3查询语句,sta.executeQuery("sql")使用这个函数,输入查询语句
查询所有字段,从t_book表格,条件id=bno,,,,其中双引号里面是固定的字符串,bno想要保持变量身份需要用+连接
rs作为查询结果是一个结果集合
![image]()
4读取结果集合内容,
next()首先可看作指针指向第一条上面是否有下一条信息,然后读取这一条记录的信息,
读取的结果暂时用变量接收,之后将变量接收到信息传递到对象中去,所以建立一个book类,
![image]()
5关闭资源,之后返回book类,因为函数的返回值类型需要变为Book类。
book对象不能建立在if内部,否则return不了,因此提到外面=null;这样查询不到就返回空值。
![image]()
6调用这个方法,并利用返回的结果,或调用返回的对象信息,或输出null。
![image]()
|
////根据编号查询对相应的数据,把访问数据库的步骤编成一个方法,加static可以直接调,不用先创建对象再调用
public static Book findBookByBno(int bno) throws ClassNotFoundException, SQLException {
Book b=null;
//首先,设置一个book类的变量,之后赋值。之所以设置因为new book再if括号内,无法return出去.其次,如果查不到b还是什么都没有的
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取链接
String url="jdbc:mysql://127.0.0.1:3306/msb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
String username="root";
String password="root";
Connection conn = DriverManager.getConnection(url, username, password);
//创建会话,sql命令发送器statement
Statement sta = conn.createStatement();
//发送sql,ResultSet可以理解为一个结果集合,包含所有数据,数据库表里面有三条记录,这个结果集合里面就有三条记录
//可以理解为rs指向一个数据集,数据集里面有一行一行的数据
ResultSet rs = sta.executeQuery("select*from t_book where id="+bno);
//处理结果
if(rs.next()){//如果结果只有一条想要获取的话,只需要写if就可以了
//查询需要返回信息,数据类型过多,不如弄个book类
//首先接收数据
int id=rs.getInt("id");
String name=rs.getString("name");
String author=rs.getString("author");
double price=rs.getDouble("price");
//将上边数据封装为一个具体对象
b=new Book();
b.setId(id);
b.setName(name);
b.setAuthor(author);
b.setPrice(price);
}
//关闭资源
sta.close();
conn.close();
return b;
}
|
|
【】功能2:查询所有书籍信息,还是通过数据库连接方式查询。另外定义一个方法。
1该方法还是从数据库获取信息,驱动-连接信息--对话--输入sql要求--处理返回结果
处理返回结果,使用next()函数获取指向的那条记录的信息,然后先用变量接收,之后传到对象里面去,最后把对象也封存进集合
![image]()
最后,返回的是集合类型
![image]()
调用方法,拿到数据库的信息,之后遍历出来
想要获取所有书籍信息,如果集合里面对象为0,那么书库没有一本书
如果集合里面有东西,就遍历
遍历出集合元素对象,需要把数据类型做一个强制转换(进入集合自动变为object,从集合取出来的也是object,需要转变类型)
之后把每个对象的信息都打印出来
![image]()
|
public static ArrayList findBooks() throws ClassNotFoundException, SQLException {
//定义集合,不能每次都成生成book而生成几十几百个book对象,将其封存在集合中
ArrayList list=new ArrayList();
//连接数据库,获取数据库信息,将其装入对象中(对象可以先存在集合,之后解封取出对象,对象再呈现信息)
//加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//获取链接
String url="jdbc:mysql://127.0.0.1:3306/msb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true";
String username="root";
String password="root";
Connection conn = DriverManager.getConnection(url, username, password);
//创建会话,sql命令发送器statement
Statement sta = conn.createStatement();
//发送sql,ResultSet可以理解为一个结果集合,包含所有数据,数据库表里面有三条记录,这个结果集合里面就有三条记录
//可以理解为rs指向一个数据集,数据集里面有一行一行的数据
ResultSet rs = sta.executeQuery("select*from t_book");
//将从查询到的信息接收,暂存于变量、对象、集合中,之后从中取出来
while(rs.next()){//如果结果只有一条想要获取的话,只需要写if就可以了
//查询需要返回信息,数据类型过多,不如弄个book类
//首先用变量暂时接收数据
int id=rs.getInt("id");
String name=rs.getString("name");
String author=rs.getString("author");
double price=rs.getDouble("price");
//将变量临时接收的信息封装进一个具体对象
Book b=new Book();
b.setId(id);
b.setName(name);
b.setAuthor(author);
b.setPrice(price);
//把众多对象封存到集合中
list.add(b);
}
//关闭资源
sta.close();
conn.close();
return list;//这样从数据库取出的信息封装进金集合,返回的就是集合类型了
}
|
|
【】功能三《删除书,单独做一个函数执行语句删除操作,返回值int i;然后在分支三,录入编号,之后验证是否删除成功
![image]()
![image]()
|
| |
| |
| |