七天零基础学java(第七天)--mysql+jbdc

 

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

 
 
 
posted @ 2025-08-16 09:19  ibddindonon  阅读(9)  评论(0)    收藏  举报